精华内容
下载资源
问答
  • 8位双向移位寄存器verilog设计

    千次阅读 2020-12-27 19:20:20
    设计一个8位双向移位寄存器,实现并行输入数据、数据左移、右移、清空数据的功能。 程序主要包括移位寄存器模块和按键去抖模块 ① Key1 控制拨码输入: a) key_flag1, key_state1实现Key1去抖(if(key_flag1 &...

    系统功能
    设计一个8位双向移位寄存器,实现并行输入数据、数据左移、右移、清空数据的功能。

    程序主要包括移位寄存器模块和按键去抖模块

    ① Key1 控制拨码输入:

    a) key_flag1, key_state1实现Key1去抖(if(key_flag1 && (!key_state1)));
    b) key_cnt [3:0]从0开始在每一次Key1 按下后加1,累积到3后再按下Key1, key_cnt 清零;
    c) en_num1为高4位输入使能信号,en_num2为低4位输入使能信号,en_num3为输入确认使能信号(都为高水平有效);
    d) key_cnt 的数值控制c)中3个使能信号的值;

    ② Key2 , Key3控制移位方向:

    a) 按键去抖同Key1 a);
    b) turn_left为左移使能信号,turn_right为右移使能信号(都为高水平有效);
    c) key_cnt 的数值控制c)中3个使能信号的值;

    ③ Clk 同步时钟信号,Reset异步清零:

     本程序用verilog编写,在quartusII上完成。

    展开全文
  • Cyclone4E FPGA设计4位串入串出移位寄存器Verilog逻辑源码Quartus工程文件, Quartus软件版本11.0, FPGA型号为CYCLONE4E系列中的EP4CE6E22C8,可以做为你的学习设计参考。 module yw_reg(clk,dout,din); input clk;...
  • Cyclone4E FPGA设计4位并入串出移位寄存器Verilog逻辑源码Quartus工程文件.。Quartus11.0工程文件, FPGA型号为CYCLONE4E系列中的EP4CE6E22C8,可以做为你的学习设计参考。 **----------------------------文件信息--...
  • Cyclone4E FPGA设计5位串入并出移位寄存器Verilog逻辑源码Quartus工程文件, Quartus软件版本11.0, FPGA型号为CYCLONE4E系列中的EP4CE6E22C8,可以做为你的学习设计参考。 module reg_cb(clk,din,clr,dout); input ...
  • 线性反馈移位寄存器(linear feedback shift register, LFSR)是指,给定前一状态的输出,将该输出的线性函数再用作输入的移位寄存器。异或运算是最常见的单比特线性函数:对寄存器的某些位进行异或操作后作为输入,...

    一、什么是LFSR?

    线性反馈移位寄存器(linear feedback shift register, LFSR)是指,给定前一状态的输出,将该输出的线性函数再用作输入的移位寄存器。异或运算是最常见的单比特线性函数:对寄存器的某些位进行异或操作后作为输入,再对寄存器中的各比特进行整体移位(百度百科定义)。

    线性反馈移位寄存器反馈分为两种,一种是IE型的LFSR,即异或门内接的线性反馈移位寄存器:

    在这里插入图片描述
    另一种是异或门外接的线性反馈移位寄存器,简称EE型LFSR
    在这里插入图片描述
    gi表示接不接入反馈,只能为0或1,为1即为接入,为0不接入。

    关于线性反馈移位寄存器(LFSR)数学原理更加详细的介绍,可以参考下面这篇文章。

    本文主要是介绍如果使用verilog来实现LFSR电路的编写。

    需要注意的是,LFSR是伪随机的,这意味着它只是接近随机,并不是完全随机的。这是因为其实从LFSR的任何状态,你都可以预测下一个状态。 有一些重要的移位寄存器属性需要注意:

    • LFSR是伪随机的,从LFSR的任何状态,都可以预测下一个状态。

    • 影响下一个状态的比特位叫做抽头。当抽头使用XOR门时,全0状态不会出现,这是因为0与0异或将始终产生0,此时LFSR将停止运行。当抽头使用XNOR门时,全1状态不会出现,这是因为1与1同或(异或非)将始终产生1,此时LFSR将停止运行。

    • 任何LFSR的最大可能迭代次数 = 2^N-1,N为级数,也就是寄存器bit位的个数。

    那么怎样的LFSR才能遍历2^N-1个状态,产生最大的迭代次数呢?也就是到底寄存器的哪些位去组合然后反馈到输入端,才能使该LFSR的所有2^N-1个状态都出现呢?这里官方给了一个表,我们可以根据这个表来确定LFSR的结构:
    在这里插入图片描述
    需要注意的是LFSR的每一位的索引是从1开始,然后到N,一共 2^N-1个状态(因为使用异或反馈时要除去全0状态,使用异或非反馈时要除去全1状态)。表中使用的是异或非XNOR。

    二、代码设计

    代码设计部分没有什么难点,主要是会移位寄存器的写法就可以。然后初始值seed_data在使用XNOR时,不要给全1就可以。

    `timescale 1ns / 1ps
    module lfsr #(parameter Bits_Num = 5)(
       input clk,
       input rst_n,
     
       // data valid
       input seed_valid,
    
       // Optional Seed Value
       input [Bits_Num-1:0] seed_data,
     
       output [Bits_Num-1:0] o_LFSR_data
    
        );
    
      reg [Bits_Num:1] LFSR_reg = 0;//保存移位寄存器的状态
      reg              XNOR_reg;
     
     
        always @(posedge clk)
        begin
          if (rst_n != 1'b0)
          begin
              if (seed_valid == 1'b1)
                LFSR_reg <= seed_data;
              else
                LFSR_reg <= {LFSR_reg[Bits_Num-1:1],XNOR_reg}; //left right
          end
        end
    
    
        always @(*)
        begin
          case (Bits_Num)
            3: begin
              XNOR_reg = LFSR_reg[3] ^~ LFSR_reg[2];
            end
            4: begin
              XNOR_reg = LFSR_reg[4] ^~ LFSR_reg[3];
            end
            5: begin
              XNOR_reg = LFSR_reg[5] ^~ LFSR_reg[3];
            end
            6: begin
              XNOR_reg = LFSR_reg[6] ^~ LFSR_reg[5];
            end
            7: begin
              XNOR_reg = LFSR_reg[7] ^~ LFSR_reg[6];
            end
            8: begin
              XNOR_reg = LFSR_reg[8] ^~ LFSR_reg[6] ^~ LFSR_reg[5] ^~ LFSR_reg[4];
            end
            9: begin
              XNOR_reg = LFSR_reg[9] ^~ LFSR_reg[5];
            end
            10: begin
              XNOR_reg = LFSR_reg[10] ^~ LFSR_reg[7];
            end
            11: begin
              XNOR_reg = LFSR_reg[11] ^~ LFSR_reg[9];
            end
            12: begin
              XNOR_reg = LFSR_reg[12] ^~ LFSR_reg[6] ^~ LFSR_reg[4] ^~ LFSR_reg[1];
            end
            13: begin
              XNOR_reg = LFSR_reg[13] ^~ LFSR_reg[4] ^~ LFSR_reg[3] ^~ LFSR_reg[1];
            end
            14: begin
              XNOR_reg = LFSR_reg[14] ^~ LFSR_reg[5] ^~ LFSR_reg[3] ^~ LFSR_reg[1];
            end
            15: begin
              XNOR_reg = LFSR_reg[15] ^~ LFSR_reg[14];
            end
            16: begin
              XNOR_reg = LFSR_reg[16] ^~ LFSR_reg[15] ^~ LFSR_reg[13] ^~ LFSR_reg[4];
              end
            17: begin
              XNOR_reg = LFSR_reg[17] ^~ LFSR_reg[14];
            end
            18: begin
              XNOR_reg = LFSR_reg[18] ^~ LFSR_reg[11];
            end
            19: begin
              XNOR_reg = LFSR_reg[19] ^~ LFSR_reg[6] ^~ LFSR_reg[2] ^~ LFSR_reg[1];
            end
            20: begin
              XNOR_reg = LFSR_reg[20] ^~ LFSR_reg[17];
            end
            21: begin
              XNOR_reg = LFSR_reg[21] ^~ LFSR_reg[19];
            end
            22: begin
              XNOR_reg = LFSR_reg[22] ^~ LFSR_reg[21];
            end
            23: begin
              XNOR_reg = LFSR_reg[23] ^~ LFSR_reg[18];
            end
            24: begin
              XNOR_reg = LFSR_reg[24] ^~ LFSR_reg[23] ^~ LFSR_reg[22] ^~ LFSR_reg[17];
            end
            25: begin
              XNOR_reg = LFSR_reg[25] ^~ LFSR_reg[22];
            end
            26: begin
              XNOR_reg = LFSR_reg[26] ^~ LFSR_reg[6] ^~ LFSR_reg[2] ^~ LFSR_reg[1];
            end
            27: begin
              XNOR_reg = LFSR_reg[27] ^~ LFSR_reg[5] ^~ LFSR_reg[2] ^~ LFSR_reg[1];
            end
            28: begin
              XNOR_reg = LFSR_reg[28] ^~ LFSR_reg[25];
            end
            29: begin
              XNOR_reg = LFSR_reg[29] ^~ LFSR_reg[27];
            end
            30: begin
              XNOR_reg = LFSR_reg[30] ^~ LFSR_reg[6] ^~ LFSR_reg[4] ^~ LFSR_reg[1];
            end
            31: begin
              XNOR_reg = LFSR_reg[31] ^~ LFSR_reg[28];
            end
            32: begin
              XNOR_reg = LFSR_reg[32] ^~ LFSR_reg[22] ^~ LFSR_reg[2] ^~ LFSR_reg[1];
            end
     
          endcase // case (Bits_Num)
        end // always @ (*)
    
        assign o_LFSR_data = LFSR_reg;
    
    
    endmodule
    
    仿真程序:
    `timescale 1ns / 1ps
    module lfsr_tb ();
     
      parameter Bits_Num = 5;
      //input
      reg clk = 1'b0;
      reg rst_n = 1'b0;
      reg seed_valid = 1'b0;
      reg [Bits_Num-1:0]seed_data = 1'b0;
      //output
      wire [Bits_Num-1:0] o_LFSR_data;
       
      lfsr #(.Bits_Num(Bits_Num)) u_lfsr
             (.clk(clk),
              .rst_n(rst_n),
              .seed_valid(seed_valid),
              .seed_data(seed_data),
              .o_LFSR_data(o_LFSR_data)
              );
      
      always @(*)
        #5 clk <= ~clk; 
       
    initial
    begin
        #20 rst_n  =  1;
    end
    
    initial
    begin
        #15 seed_valid  =  1;
            seed_data   =  5;
        #10 seed_valid  =  0;
    end
    initial
    begin
        #100 $finish;
    end
    endmodule 
    

    在这里插入图片描述
    在25ns时采样到seed_data = 5LFSR_reg初始值被置为了00101,然后通过:

    LFSR_reg <= {LFSR_reg[Bits_Num-1:1],XNOR_reg}; //left right
    
    XNOR_reg = LFSR_reg[5] ^~ LFSR_reg[3];
    

    计算得到00001也即1,然后后面依次按照算法计算即可。

    展开全文
  • 四位循环移位寄存器代码!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  • 基于fpga的32位桶式移位寄存器实现,参考文档《三十位桶式移位寄存器的FPGA实现--杜慧敏》
  • 此书详细的讲解了此项技术的原理及其要点,对于一个初学者来说是一个很不错的选择
  • 一些用Modelsim仿真的verilog源代码,包括计数器,移位寄存器等。
  • 移位寄存器-Verilog

    2021-09-02 21:07:18
    //五位循环右移 module register_right( input clk, input [4:0] data_in, output reg [4:0] data_out ); always @ (posedge clk) begin data_out <= ({data_in[0],data_in[4:1]});...
    //五位循环右移
    module register_right(
    	input            clk,
    	input 	   [4:0] data_in,
    	output reg [4:0] data_out
        );
    	 
        always @ (posedge clk)
        begin	
    		data_out <= ({data_in[0],data_in[4:1]});
        end
    
    endmodule
    
    展开全文
  • 目录 背景 ...环形移位寄存器(右移) Verilog HDL描述 测试代码 仿真波形图 ISE综合 背景 之所以单独把这个简单的东西拿出来,就是因为这个东西我可能要用到,不能眼高手低,以为简单就一...

    目录

    背景

    测试一

    Verilog HDL语言描述

    测试代码

    仿真波形图

    测试二

    Verilog HDL语言描述

    测试代码

    仿真图

    ISE综合

    RTL Schematic

    测试三

    环形移位寄存器(右移)

    Verilog HDL描述

    测试代码

    仿真波形图

    ISE综合


    背景

    之所以单独把这个简单的东西拿出来,就是因为这个东西我可能要用到,不能眼高手低,以为简单就一眼带过,之后,用的时候就不能快速地拿出来,处于这个简单的目的,这个知识点贴出来遛遛。

    之所以强调非环形移位,很简单,我不想让它具有环形移位的功能呗,我不需要,需要的时候直接改一行代码即可。

    以一个位宽为10的右移位寄存器为例吧(解读ADC采样芯片(EV10AQ190A)的采样(工作)模式(双通道模式)这篇博文中用到的ADC芯片采样数据就是10位的,这里是有实际背景的!)

    测试一

    这种移位寄存器,给一个输入数据之后,在一个时钟上升沿到来时,输出等于输入右移1位,高位补零,然后如果没有输入数据的话,输出就不在变化了,直到又给一个输入,然后时钟上升沿到来时,输入信号右移1位作为输出,如此下去。

    Verilog HDL语言描述

    //10 bit right shift register
    module register(clk, din, dout);
    
    input clk;
    input [9:0] din;
    output [9:0] dout;
    reg [9:0] dout;
    
    always@(posedge clk)
    begin
    	dout <= {1'b0, din[9:1]};
    end
    
    
    endmodule
    

    测试代码

    //testbench file for 10 bit right shift register
    `timescale 1ns/1ps
    module register_tb;
    
    reg clk;
    reg [9:0] din;
    wire [9:0] dout;
    
    //clock generation of period 20 ns
    always
    begin
    	#10 clk = ~clk;
    end
    
    //initialization
    initial
    begin
    	clk = 1'b0;
    	din = 10'b0010110110;
    	#200 din = 10'b1110001010;
    end
    
    register u1(.clk(clk),.din(din), .dout(dout));
    
    
    endmodule
    
    

    仿真波形图

    测试二

    如果需要右移3位,则

    Verilog HDL语言描述

    //10 bit right shift register
    module a(clk, din, dout);
    
    input clk;
    input [9:0] din;
    output [9:0] dout;
    reg [9:0] dout;
    
    always@(posedge clk)
    begin
    	dout <= {3'b000, din[9:3]};
    end
    
    
    endmodule
    

    测试代码

    //testbench file for 10 bit right shift register
    `timescale 1ns/1ps
    module register_tb;
    
    reg clk;
    reg [9:0] din;
    wire [9:0] dout;
    
    //clock generation of period 20 ns
    always
    begin
    	#10 clk = ~clk;
    end
    
    //initialization
    initial
    begin
    	clk = 1'b0;
    	din = 10'b0010110110;
    	#200 din = 10'b1110001010;
    end
    
    register u1(.clk(clk),.din(din), .dout(dout));
    
    
    endmodule
    

    仿真图

    ISE综合

    RTL Schematic

    测试三

    环形移位寄存器(右移)

    Verilog HDL描述

    //10 bit right shift register
    module register(clk, din, dout);
    
    input clk;
    input [9:0] din;
    output [9:0] dout;
    reg [9:0] dout;
    
    always@(posedge clk)
    begin
    	dout <= {din[0], din[9:1]};
    end
    
    
    endmodule
    

    测试代码

    //testbench file for 10 bit right shift register
    `timescale 1ns/1ps
    module register_tb;
    
    reg clk;
    reg [9:0] din;
    wire [9:0] dout;
    
    //clock generation of period 20 ns
    always
    begin
    	#10 clk = ~clk;
    end
    
    //initialization
    initial
    begin
    	clk = 1'b0;
    	din = 10'b0010110110;
    	#200 din = 10'b1110001010;
    end
    
    register u1(.clk(clk),.din(din), .dout(dout));
    
    
    endmodule
    

    仿真波形图

    ISE综合

    RTL Schematic

    事实上,我以前做过移位寄存器的总结:移位寄存器专题

    展开全文
  • 这个文件详细的描述了一位寄存器的实现过程还有testbench,主要是以word的形式存放的
  • verilog实现移位寄存器:分别可实现 自循环左移右移、带进位位的循环左移 右移
  • 在数字电子产品中,移位寄存器是级联的触发器,其中一个触发器的输出引脚q连接到下一个触发器的数据输入引脚(d)。 因为所有触发器都在同一时钟上工作,所以存储在移位寄存器中的位阵列将移位一个位置。
  • Verilog-LFSR线性反馈移位寄存器1 LFSR 是什么2 几道题目2.1 题目1:5-bit LFSR2.2 题目2:3-bit LFSR2.3 题目3:32-bit LFSR 1 LFSR 是什么 在HDLBits网站做到了几道关于LFSR,Liner Feedback Shift Register线性...
  • verilog8位寄存器

    2018-04-20 13:05:50
    verilog初学者设计8位寄存器,提供verilog源代码,里面不含仿真文件。
  • Verilog FPGA 4位寄存器 异步清零 同步置数 可调时钟周期
  • verilog 描述移位寄存器 并用multisim生成电路图 。
  • 8位串入并出移位寄存器Verilog描述

    千次阅读 2020-04-24 18:18:00
    1 Verilog描述 module shift_s2p( input din, input clk, input clr, output reg [7:0] q ...//串入并出移位寄存器 /* 该寄存器由8个同步D触发器组成 */ always@(posedge clk or negedge clr)begin ...
  • 1 Verilog描述 module shift_s2s( input din, input clk, output reg dout ); reg tmp1,tmp2,tmp3,tmp4,tmp5,tmp6,tmp7;...//串行输入串行输出移位.../*8位移位寄存器由8个D触发器串联构成,在时钟 信号的作用...
  • verilog数字系统实验设计实现带缓冲器的串入并出移位寄存器
  • 1 Verilog描述 module shift_p2s( input clk, input [7:0] din, input load, output reg q ); reg [7:0] tmp; always@(posedge clk)begin if(load == 1...
  • 移位寄存器专题(verilog HDL设计)

    万次阅读 多人点赞 2018-05-19 21:09:11
    移位寄存器简介 分类 4位右移位寄存器工作原理 1、16位右移位寄存器 2、16位左移寄存器 3、串行输入并行输出寄存器 4、并行输入串行输出移位寄存器 移位寄存器简介 移位寄存器内的数据可以在移位脉冲(时钟...
  • 此程序是用verilog语言编写的8位移位寄存器,已经通过了验证!
  • verilog_移位寄存器_仿真(程序逐句解释)

    千次阅读 多人点赞 2020-10-19 16:00:45
    前言   之前老是想着学的快点,就直接编译了程序就下载在开发板上跑,后来发现这样不行,因为如果程序有问题,验证和纠错的时间成本太高了...移位寄存器程序代码: `timescale 1ns / 1ps /////////////////////////
  • 移位寄存器内的数据可以在移位脉冲(时钟信号)的作用下依次左移或右移。移位寄存器不仅可以存储数据,还可以用来实现数据的串并转换、分频,构成序列码发生器、序列码检测器,进行数值运算以及数据处理等,它也是...
  • 一、线性反馈移位寄存器(LFSR) 通过对事先选定的种子做运算使得人工生成的伪随机序列的过程,在实际中,随机种子的选择决定了输出的伪随机序列的不同,也就是说随机种子的选择至关重要。 产生伪随机数的方法最...
  • Write a top-level Verilog module (named top_module) for the shift register, assuming that n = 4. Instantiate four copies of your MUXDFF subcircuit in your top-level module. Assume that you are goi
  • 移位寄存器(左移、右移、双向)的Verilog实现 移位寄存器的功能和电路形式较多,按移位方向分有左移、右移、和双向移位寄存器;按接收数据方式分为串行输入和并行输入;按输出方向分为串行输出和并行输出。 如果将...
  • 线性反馈移位寄存器(LFSR) 文章目录线性反馈移位寄存器(LFSR)1. 题目介绍2. 代码解析 1. 题目介绍 线性反馈移位寄存器(LFSR)是通常带有几个XOR门来产生下一状态的移位寄存器。 Galois LFSR是一个特殊的移位...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,878
精华内容 1,151
关键字:

移位寄存器verilog

友情链接: kalman-fliter.rar