错题集: HDLbits module module_shift

本文介绍了如何在Verilog中使用向量端口连接多个8D触发器,构建一个3位长的8位移位寄存器。同时,通过创建一个4对1多路复用器,根据输入选择不同延迟的输出。多路复用器的选择由输入d和两个选择信号控制,提供了从零到三个时钟周期的延迟选项。
摘要由CSDN通过智能技术生成

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

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

提供给您的模块是:module my_dff8 ( input clk, input [7:0] d, 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,q2,q3;
    my_dff8 inst1 (clk,d,q1);
    my_dff8 inst2 (clk,q1,q2);
    my_dff8 inst3 (clk,q2,q3);

    always@(*)//忘记了这种用(*)表示所有信号
        begin
            case(sel[1:0])//也要指明位宽
                2'b00:  q <= d[7:0];
                2'b01:  q <= q1[7:0];
                2'b10:  q <= q2;//!必须指明sel赋值的位宽2'b,不指明,就是错的!;
                                //而q的位宽不指明是没有问题的(最好写上);
                2'b11:  q <= q3[7:0];//时序逻辑采用非阻塞赋值
            default: q = 0;
        	endcase//case语句要以endcase结束
        end
endmodule

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值