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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • matlab二元函数求极值例题_matlab求二元函数最大值

    matlab二元函数求极值例题_matlab求二元函数最大值MATLAB一元函数与二元函数求极小值

    2025年8月27日
    7
  • 2020年下半年总结与计划

    2020年下半年总结与计划0x00前言2020年到如今已经到了十二月中旬,下半年所学的东西还是挺多,我觉得学习的一个效率也是有着飞跃般的提升。主要的原因可能在于我和我的好朋友(基友)住在一个房间

    2021年12月12日
    51
  • 基于stm32四轮小车简易PID控制

    基于stm32四轮小车简易PID控制看前需知:作者本人使用的是四个普通的TT电机加编码器+增量式PID,适合PID初学者,但是需要对PID和增量式PID有一定的认知,本篇未有详细介绍,以代码应用为主,大佬勿喷。文章目录一、粗谈PID?二、使用的硬件设备三、软件设计四、关键代码1.TIM1定时器:2.TIM2编码器模式示例:3.电机初始化:4.TIM8PWM输出:5.PID:6.中断服务函数:总结*云中何曾落羽,踏遍三岛寻声*一、粗谈PID?PID在生活中很常见,举个例子。例如生活中,一个加热器需要对某个物体进行恒温控制,但是由于某

    2022年5月27日
    47
  • 滑雪教学视频高级双板_双板滑雪中级技巧

    滑雪教学视频高级双板_双板滑雪中级技巧转载于:http://www.cnblogs.com/1-2-3/archive/2012/03/08/ski-vidio.html1. 央视教学片http://www.youku.com/playlist_show/id_1526075_ascending_1_mode_pic_page_1.html  共21集,讲解非常详尽,但是从另一方面讲,它太长了,掺杂了各种花里胡哨的东西

    2022年8月29日
    2
  • c语言代码缩进是什么意思_word文字无法换行

    c语言代码缩进是什么意思_word文字无法换行一、缩进的空格数为4个。二、“{”和“}”各自独占一行。不规范例子:for(i=0;i&lt;student_num;i++);{if((score[i]&gt;=0)&amp;&amp;(score[i])&lt;=100)total_score+=score[i];elseprin…

    2022年10月18日
    1
  • 网页音乐播放器代码

    网页音乐播放器代码网页音乐播放器代码如果你也想往自己的博客里,网页里加入音乐播放器,只要复制下面的网页音乐播放器代码,做适当的修改就可以啦!有很多播放器可以选择,不要挑花眼哦!中true或1表示自动播放,false或0表示手动播放loop=”true”中的true或1表示重复播放,f

    2022年6月16日
    35

发表回复

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

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