HDLBITS 第三章module_shift8刷题总结

本练习是module_shift.模块端口不是只有单个引脚,我们现在有以矢量作为端口的模块,您将在其上附加线矢量而不是普通线。与 Verilog 中的其他位置一样,端口的矢量长度不必与连接到它的导线匹配,但这会导致矢量的零填充或截断。本练习不使用矢量长度不匹配的连接。

您将获得一个具有两个输入和一个输出的模块(实现一组 8 D 触发器)。实例化其中三个,然后将它们链接在一起,形成长度为 8 的 3 位宽移位寄存器。此外,创建一个 4 对 1 多路复用器(未提供),该多路复用器根据以下条件选择要输出的内容:输入 d 处的值、第一个 d 字拖之后、第二个之后或第三个 D 触发器之后的值。(实质上,选择延迟输入的周期数,从零到三个时钟周期。my_dff8sel[1:0]sel

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

未提供多路复用器。一种可能的编写方法是在带有语句的块内。(另请参阅:alwayscase多路复用9to1V)

Module Declaration

module top_module ( 
    input clk, 
    input [7:0] d, 
    input [1:0] sel, 
    output [7:0] q 
);
module top_module ( 
    input clk, 
    input [7:0] d, 
    input [1:0] sel, 
    output [7:0] q 
);
    wire [7:0] q1;
    wire [7:0] q2;
    wire [7:0] q3;
    my_dff8 block1 ( .clk(clk),.d(d),.q(q1));
    my_dff8 block2 ( .clk(clk),.d(q1),.q(q2));
    my_dff8 block3 ( .clk(clk),.d(q2),.q(q3));
    
    always @(*)
        begin 
            case(sel)
           2'b00 : q = d;
           2'b01 : q = q1;
           2'b10 : q = q2;
           2'b11 : q = q3;
            endcase
        end
             
endmodule

总结:

 首先:第一步设置内部wire型向量的三根导线;设置成q1,q2,q3;

第二步:将结构进行命名,我采用的是名字命名引用的方式:更为清晰;

第三步:进行选择always语句设置敏感源设置,敏感列表过多元素的话可以采用@*的形式

第四步:用case语句进行选择生成对应的电路,本题是实现的四选一的功能,输入对应那个根据选择,则输出也对应那根导线所连接的状态;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值