移位寄存器和并转串

移位寄存器和并转串

移位寄存器:思路很清晰,就是利用一个中间变量,在reset时将in的值赋给Q,与其说是rst其实更像是load,不过看别人确实有一个load键,这样就可以避免必须按下rst影响到其他模块,不过我感觉问题不大,可以直接rst

设计文件

module top(in,out,en,clk,rst);
    input [7:0] in;
    input clk;
    input en;
    input rst;
    output reg[7:0] out;
    reg[7:0] Q;//中间变量传递in
    always@(posedge clk or posedge rst)begin
        if(rst)
            Q<=in;
        else if(en)
            begin
                out={Q[0],Q[7:1]};
                Q<={Q[0],Q[7:1]};//其实还有更优雅的写法{Q,out}<={Q[0],Q};
            end
        else
            begin
                out={Q[6:0],Q[7]};
                Q<={Q[6:0],Q[7]};
            end
        
    end
endmodule

仿真文件

module simular(

    );
    reg[7:0]in;
    reg en;
    reg clk;
    reg rst;
    wire[7:0]out;
    top t(.in(in),.clk(clk),.en(en),.out(out),.rst(rst));
    always
      #10  clk=~clk;
    initial begin
      rst=1'b0;
      clk=1'b0;en=1'b1;
      in=8'b10010101;
      #1 rst=1'b1;
      #1 rst=1'b0;
      #100 en=1'b0; 
    end
endmodule

对于它的仿真图
在这里插入图片描述
然后看到这对于并转串就很明了了

module top(in,out,en,clk,rst);
    input [7:0] in;
    input clk;
    input en;
    input rst;
    output reg out;
    reg[7:0] Q;
    always@(posedge clk or posedge rst)begin
        if(rst)
            Q<=in;
        else if(en)
            begin
                out=Q[0];
                Q<={1'b0,Q[7:1]};
            end
        else
            begin
                out=Q[7];
                Q<={Q[6:0],1'b0};
            end
        
    end
endmodule

仿真文件

module simular(

    );
    reg[7:0]in;
    reg en;
    reg clk;
    reg rst;
    wire out;
    top t(.in(in),.clk(clk),.en(en),.out(out),.rst(rst));
    always
      #10  clk=~clk;
    initial begin
      rst=1'b0;
      clk=1'b0;en=1'b1;
      in=8'b10010101;
      #1 rst=1'b1;
      #1 rst=1'b0; 
    end
endmodule

仿真图
在这里插入图片描述
最后遇到的一个神奇操作,并转串的仿真文件我是copy的移位寄存器的改的,但是第一次仿真莫名其妙的都出现高阻态(Z),代码是没问题的(确信),然后我在仿真里把top文件设置成设计文件,然后又设置回来,仿真图就出现了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值