Verilog实现移位寄存器「建议收藏」

Verilog实现移位寄存器「建议收藏」移位寄存器

大家好,又见面了,我是你们的朋友全栈君。

Verilog实现8位环形移位寄存器

左移: 环形就是首尾相连

module shift_regist (
    input  wire clk,
    input wire rstn,
    input wire [7:0]D,
    output reg [7:0]Q
);
always @(posedge  clk  or  negedge  rstn) begin
    if(!rstn)
        Q<=8'b000000;
    else
         Q<={ 
   D[6:0],D[7]} ;    
end
endmodule //shift_regist 

右移:

module shift_regist (
    input  wire clk,
    input wire [7:0]D,
    input wire rstn,
    output reg [7:0]Q
);
always @(posedge  clk ) begin
        if(!rstn)
        Q<=8'b000000;
    else
         Q<={ 
   D[0],D[7:1]} ;    
end
endmodule //shift_regist  

普通的移位寄存器用for语句实现:

module shift_regist2(Q,D,rst,clk);
    output [7:0] Q;
    input D,rst,clk;
    reg [7:0] Q;
    integer i;
always @(posedge clk)
    if (!rst) 
        Q<=8'b000000;
    else
      	for (i=7;i>0;i=i-1)
        begin
            Q[i]<=Q[i-1];  
                Q[0]<=D;
            end
endmodule 

普通左移:

//8 bit shift register
module shift_regist(
  input d,
  input rstn,
  input clk,
  output reg [7:0]q
);
  always@(posedge clk or negedge rstn)begin
    if(!rstn)
      q <=8'b0;
    else
      q <={ 
   q[6:0],d};
  end
endmodule

tb测试:

module tb;
  reg d,rstn,clk;
  wire [7:0]q;

  shift_regist u_shift(d,rstn,clk,q);

  initial begin
    rstn=0;
    clk=0;
    #5
    rstn=1;
  end

  always #5 clk=~clk;

  initial begin
    d=0;
    #10 d=0; //00
    #10 d=1; //001
    #10 d=1; //0011
    #10 d=0; //00110
    #10 d=0;
    #10 d=1;
    #10 d=1;
    #10 d=0;
    #10 d=1;
    #10 $finish;
  end
endmodule

图形分析:
在这里插入图片描述

双向shift:就是加个判断

always@(posedge clk)begin
	if(dir==0)
		sf<={ 
   sf[2:0],din};
	else
		sf<={ 
   din,sf[3:1]};
end
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/160236.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ORA-12154 问题解决办法

    ORA-12154 问题解决办法问题 ORA-12154: TNS:couldnotresolvetheconnectidentifierspecified,即无法解析指定的连接标识符。这说明缺少了一个环境变量,TNS_ADMIN。    解决方法:右击我的电脑->属性 ->高级 ->环境变量->系统变量->新建,    变量名为:TNS_A

    2022年7月24日
    29
  • JAVAweb学生管理系统(学生信息管理系统代码)

    关注公众号:吾爱代码,回复Java学生管理系统,获取下载链接~关注公众号:吾爱代码,回复Java学生管理系统,获取下载链接~关注公众号:吾爱代码,回复Java学生管理系统,获取下载链接~

    2022年4月15日
    67
  • vscode怎样新建HTML文件_vscode快速生成html

    vscode怎样新建HTML文件_vscode快速生成html1、点击OpenFolder:2、选择目标文件夹,在本地新建一个拓展名为html的文件:3、在第1行输入!(英文状态下),按tab键,新建成功。界面如下图所示:…

    2022年8月22日
    7
  • VMM传记_默克尔传

    VMM传记_默克尔传最近看了三篇有关于VMM的文章,分别是《VirtualMachineMonitors》、《VirtualMachineMonitors:CurrentTechnologyandFutureTrends》和《AnUpdatedPerformanceComparisonofVirtualMachinesandLinuxContainers》,在这里简要说下本人的读后…

    2025年12月2日
    3
  • 数据库学习笔记【自学教程】—— 如何建立数据库

    数据库学习笔记【自学教程】—— 如何建立数据库PS:本项目将在D盘下创建名为Test的文件夹(D:/Test)。如若想修改文件位置,需在后续代码中一并修改。点击工具栏“新建查询”或者使用快捷键Ctrl+N==>打开查询分析器SQLServer中,一个数据库至少包括两个文件。一个是主数据文件,一个是日志文件。一、建立数据库1)通过语句建立数据库新建一个名为“教师授课管理数据库”的数据库,代码如下:CREATEDATABASE教师授课管理数据库ON(NAME=T…

    2025年11月26日
    2
  • oracle insert into select写法[通俗易懂]

    oracle insert into select写法[通俗易懂]INSERTINTOT_MONITOR_USER_INFO(METER_NO,CONSUMER_NO,USER_INFO,COURT_ID)select*from(selectdistinctMETER_NO,CONSUMER_NO,’wy’asUSER_INFO,EPU_COURTasCOURT_IDfromT_METERwhereC_DISTRICTBCDIDin(selectDISTINCTDISTRICTBCDIDfrom..

    2022年7月15日
    42

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号