verilog HDLBits刷题“Module shift8”--模块 shift8---模块和向量

一、题目

本练习是module_shift.模块端口不再只是单个引脚,我们现在有以向量作为端口的模块,您将连接线向量而不是普通线。与 Verilog 中的其他任何地方一样,端口的 vector 长度不必与连接到它的电线匹配,但这会导致 vector 的零填充或交叉。本练习不使用向量长度不匹配的连接。

您将获得一个具有两个 inputs 和一个 output 的模块(实现一组 8 个 D flip-flops)。实例化其中的三个,然后将它们链接在一起,形成一个长度为 3 的 8 位宽移位寄存器。此外,创建一个 4 对 1 多路复用器(未提供),该多路复用器选择要输出的内容取决于:输入 d 处的值、第一个 d 触发器之后、第二个 d 触发器之后或第三个 D 触发器之后的值。(本质上,选择延迟 input 的周期数,从 0 到 3 个 clock cycles.)my_dff8``sel[1:0]``sel

提供给您的模块是:module my_dff8 ( input clk, input [7:0] d, output [7:0] q );

未提供多路复用器。一种可能的编写方法是在块内包含 statement。(另请参阅:always``caseMUX9TO1V)

模块声明

复制代码
module top_module ( 
    input clk, 
    input [7:0] d, 
    input [1:0] sel, 
    output [7:0] q 
);

二、分析

内部信号线要自己命名,使用多路复用器,即选择器时,用到always语句,该语句中的输出必须是reg类型,故可定义中间变量q_temp为reg类型,最后再将q_temp赋值给q。也可以在声明端口q时直接定义为reg类型。

三、代码实现

复制代码
module top_module ( 
    input clk, 
    input [7:0] d, 
    input [1:0] sel, 
    output [7:0] q 
);
    reg [7:0]q_temp;
    wire [7:0]q1,q2,q3;
    my_dff8 inst1(.clk(clk),.d(d),.q(q1));
    my_dff8 inst2(.clk(clk),.d(q1),.q(q2));
    my_dff8 inst3(.clk(clk),.d(q2),.q(q3));
    always@(*)begin
        case(sel)
            2'b00:q_temp<=d;
            2'b01:q_temp<=q1;
            2'b10:q_temp<=q2;
            2'b11:q_temp<=q3;
        endcase
    end
    assign q=q_temp;
endmodule

module top_module (
	input clk,
	input [7:0] d,
	input [1:0] sel,
	output reg [7:0] q
);

	wire [7:0] o1, o2, o3;		// output of each my_dff8
	
	// Instantiate three my_dff8s
	my_dff8 d1 ( clk, d, o1 );
	my_dff8 d2 ( clk, o1, o2 );
	my_dff8 d3 ( clk, o2, o3 );

	// This is one way to make a 4-to-1 multiplexer
	always @(*)		// Combinational always block
		case(sel)
			2'h0: q = d;
			2'h1: q = o1;
			2'h2: q = o2;
			2'h3: q = o3;
		endcase

endmodule

四、时序

相关推荐
Capricorn19889 分钟前
解决全网抄 Karpathy 导致的 LLM Wiki 污染?基于知芽 Notebook Skill 的 raw/ 笔记法排障指南
大数据·论文阅读·人工智能·笔记·论文笔记
壹玖玖肆37 分钟前
openGauss使用笔记
笔记
宵时待雨42 分钟前
linux笔记归纳17:传输层协议UDP
linux·笔记·udp
噜~噜~噜~2 小时前
操作系统笔记-2.3.2.1 进程互斥的软件实现方法
笔记·操作系统
云贝教育-郑老师3 小时前
【麒麟服务器系统交付:一个DBA的六年信创实战笔记】
服务器·笔记·dba
玖玥拾3 小时前
LeetCode 392 判断子序列
笔记·算法·leetcode
摇滚侠4 小时前
《SpringBoot 3:入门与应用实战》第 7 章 AOP 思想与实现 阅读笔记 15
java·spring boot·笔记
摇滚侠5 小时前
《SpringBoot 3:入门与应用实战》第 7 章 AOP 思想与实现 阅读笔记 14
spring boot·笔记·后端
陈年老古董7 小时前
OpenCV图像处理笔记:图像拼接、答题卡识别与目标提取
人工智能·笔记·python·opencv·计算机视觉
陈年老古董7 小时前
CentOS编译安装Python3.11完整教程
linux·笔记·学习·centos·python3.11