精华内容
下载资源
问答
  • 随机信号发生器Verilog

    2018-09-29 15:10:30
    使用LFSR和CASR构成随机数或随机信号发生器Verilog实现
  • 伪随机信号发生器,m序列,用verilog代码编写
  •  计数型序列信号发生器能产生多组序列信号,这是移位型发生器所没有的功能.计数型序列信号发生器是由计数器和组合电路构成的。  本实验的目的就是设计一个序列信号发生器。设计产生序列11100100、11100100、···...


    前言

    在数字电路中, 序列信号是指在同步脉冲作用下循环地产生一串周期性的二进制信号.能产生这种信号的逻辑器件就称为序列信号发生器。
    序列信号发生器是数字电路系统中常用的功能单元,按照序列训话长度M和触发器数目n的关系可分为三种:
    (1)最大循环长度序列码,M=2^n;
    (2)最大线性序列码(m序列码),M=(2^n)-1。
    (3)任意循环长度序列码,M<2^n。
    序列信号发生器是能够产生一组或多组的序列信号的时序电路,他可以有纯时序电路构成,也可以有包含时序和组合逻辑的混合电路构成。
    下面介绍三种设计思路,以产生100111序列的信号发生器为例。

    一、由移位寄存器构成

    单纯使用移位寄存器的序列信号发生器,由于输入输出之间没有组合电路,不需要组合逻辑反馈运算,因此电路工作频率高,但问题在于移位寄存器的长度取决于序列长度,占用电路面积大。
    代码如下(示例):

    module  signal_maker1(out,clk, load, D);
    parameter M=6;
    output out;
    input clk,load;
    input [M-1:0] D;
    reg [M-1:0] Q;
    initial Q=6'b100111;
    always @(posedge clk)
    if(load) 
    Q<=D;
    else 
    Q<={Q[M-2:0],Q[M-1]};
    assign out=Q[M];
    endmodule
    

    二、由移位寄存器和组合逻辑电路构成

    反馈移位型序列码发生器的结构框图如下图所示,它由移位寄存器和组合逻辑网络组成,从移位寄存器的某一输出端可以得到周期性的序列码。
    在这里插入图片描述
    其设计按以下步骤进行:
    (1)根据给定序列信号的循环周期M,确定移位寄存器位数n,2^(n-1)<M≤2^n
    (2)确定移位寄存器的M个独立状态。将给定的序列码按照移位规律每n位一组,划分为M个状态。若M个状态中出现重复现象,则应增加移位寄存器位数。用n+1位再重复上述过程,直到划分为M个独立状态为止.
    (3)根据M个不同的状态列出移位寄存器的态序表和反馈函数表,求出反馈函数F的表达式。
    (4)检查自启动性能。
    与上面的序列信号发生器相比,各个寄存器的输出需要经过反馈网络,然后才连接到移位寄存器的输入端。因此,电路的速度必然下降,但反馈网络的好处在于它可以节省寄存器。

    对于“100111”序列的信号发生器。
    首先,确定所需移位寄存器的个数n。因M=6,故n≥3。
    然后,确定移位寄存器的六个独立状态。
    按照规律每三位一组,划分六个状态为100、001、011、111、111、110。
    其中状态111重复出现,故取n=4,并重新划分状态,得到:1001、0011、0111、1111、1110、1100。因此确定n=4。
    第三,列态序表和反馈激励函数表,求反馈函数F的表达式。
    首先列出态序表,然后根据每一状态所需要的移位输入即反馈输入信号,列出反馈激励函数表,如下表所示。求得反馈激励函数:
    在这里插入图片描述
    在这里插入图片描述

    代码如下(示例):

    module  signal_maker(out,clk, load, D);
    parameter M=4;
    output out;
    input clk,load;
    input [M-1:0] D;
    reg[M-1:0] Q;
    wire w1;
    
    always @(posedge clk)
    if(load)
    Q<=D;
    else
    Q<={Q[M-2:0],w1};
    assign w1=(~Q[3])|((~Q[1])&(~Q[0]))|(~Q[3]&(~Q[2]));
    assign out=Q[M-1];
    endmodule
    

    仿真出来的电路如下:
    在这里插入图片描述

    三、由计数器构成

    计数型序列信号发生器和反馈型序列信号发生器大体相同,它们都是由时序电路和组合电路两部分构成。不同在于,反馈型序列信号发生器的时序状态由移位寄存器产生,输出取寄存器的最高位;而在计数型序列信号发生器中,采用计数器代替移位寄存器产生时序状态,输出由组合电路产生。

    计数型的好处在于,计数器的状态设置与输出序列没有直接关系,不需要像上面一样,根据输出确定状态。只需要将反馈网络设计好就可以了。因此计数结构对于输出序列的更改比较方便,而且只要连接到不同的反馈网络,它可以同时产生多组序列码

    在这里插入图片描述
    设计过程分为两步:第一,根据序列码的长度M设计模M计数器,状态可以自定;第二,按计数器的状态转移关系和序列码的要求设计组合输出网络。
    对于“100111”序列的信号发生器。
    序列信号的M值为6,因为需选用模6的计数器。计数器的状态选择从000到101可以得到输出的组合逻辑真值表
    在这里插入图片描述
    由真值表可画出输出Z的卡诺图,得到输出函数:
    在这里插入图片描述

    代码如下(示例):

    module signal_maker3(out,clk,reset);
    parameter M=3;
    output out;
    input clk,reset;
    reg[M-1:0] counter;
    
    always @(posedge clk)
    if(!reset) 
    count<=3'b000;
    else 
    counter<=counter+1;
    assign out=counter[2]|((counter[1])&(~counter[0]))|(counter[1]&counter[0]);
    endmodule
    

    仿真出来的电路:
    在这里插入图片描述

    展开全文
  • FPGA dds 正弦波信号发生器 verilog。。。。。。。。。
  • 伪随机序列 发生器 verilog quartus仿真,带ROM模块
  • EDA序列信号发生和检测设计实验程序,用Verilog语言设计的,下载到实验仪器测试成功
  • 基于FPGA与Verilog 硬件描述语言设计并实现了一种数据率按步进可调、低数据误码率、反馈多项式为f(x)=1+x■+x■+x■+x■的m序列信号发生器。系统时钟为20 MHz, m序列信号发生器输出的数据率为20~100 kbps,通过2个...
  • m序列发生器 verilog

    热门讨论 2012-07-12 23:31:43
    VERILOG 产生伪随机序列,已做仿真。仿真结果包含在工程中。
  • 序列信号产生verilog HDL 设计

    千次阅读 多人点赞 2018-05-20 15:48:26
    用一个不断循环的状态机,循环...直接给出verilog HDL设计代码://有限状态机方式实现001011序列信号产生 module sequence_signal_fsm(clk, rst_n, dout); input clk, rst_n; output dout; reg dout; ...

    一、状态转移型的序列信号产生器的verilog HDL 设计

    用一个不断循环的状态机,循环产生序列信号001011。过程过于简单,我就不画状态图了。

    直接给出verilog HDL设计代码:

    //有限状态机方式实现001011序列信号产生器  
    module sequence_signal_fsm(clk, rst_n, dout);  
        input clk, rst_n;  
        output dout;  
        reg dout;  
        reg [2:0] pre_state, next_state;  
        parameter s0 = 3'b000, s1 = 3'b001, s2 = 3'b010,  
                s3 = 3'b011, s4 = 3'b100, s5 = 3'b101;  
        always @(posedge clk or negedge rst_n)  
            begin  
                if(rst_n == 0)  
                    pre_state <= s0;  
                else  
                    pre_state <= next_state;  
            end  
      
        always @(pre_state)  
            begin  
                case(pre_state)  
                    s0:  
                        begin  
                            dout = 1'b0;  
                            next_state <= s1;  
                        end  
                    s1:  
                        begin  
                            dout = 1'b0;  
                            next_state = s2;  
                        end  
                    s2:  
                        begin  
                            dout = 1'b1;  
                            next_state = s3;  
                        end  
                    s3:  
                        begin  
                            dout = 1'b0;  
                            next_state = s4;  
                        end  
                    s4:  
                        begin  
                            dout = 1'b1;  
                            next_state = s5;  
                        end  
                    s5:  
                        begin  
                        dout = 1'b1;  
                        next_state = s0;  
                        end  
                    default: next_state = s0;  
                endcase  
            end  
      
    endmodule  
    

    测试文件为:

    `timescale 1ns/1ps
    module sequence_signal_fsm_tb;
    	reg clk, rst_n;
    	wire dout;
    	
    	always
    		#10 clk = ~clk;
    		
    	initial
    		begin
    			clk = 1'b0;
    			rst_n = 1'b1;
    			#10 rst_n = 1'b0;
    			#10 rst_n = 1'b1;
    		end
    	sequence_signal_fsm U1(.clk(clk), .rst_n(rst_n), .dout(dout));
    
    endmodule
    

    在Modelsim中仿真所得波形图为:


    二、移位寄存器型序列信号产生器

    下面描述的是一个6位移位寄存器类型的序列信号产生器,在输入端输入任意序列,通过移位寄存器,使得输入信号的最高位移入最低位,其他各位依次向左移一位,在每个时钟上升沿到来时,将输入信号的最高位通过dout输出,从而循环产生序列信号。

    下面直接给出verilog HDL设计代码:

    module signal_generator_shifter_reg(clk, rst, din, dout);
    	input clk, rst;
    	input [5:0] din;
    	output dout;
    	reg dout;
    	reg [5:0] temp;
    	
    	always@(posedge clk)
    		begin
    			if(rst == 1'b1)
    				temp <= din;
    			else
    				begin
    					dout <= temp[5];
    					temp <= {temp[4:0], temp[5]};
    				end
    		end
    endmodule

    测试代码为:

    `timescale 1ns/1ps
    module signal_generator_shifter_reg_tb;
    	reg clk, rst;
    	reg [5:0] din;
    	wire dout;
    	
    	always
    		#10 clk = ~clk;
    		
    	initial
    		begin
    			clk = 1'b0;
    			rst = 1'b0;
    			#10 rst = 1'b1;
    			din = 6'b001011;
    			#20 rst = 1'b0;
    		end
    	signal_generator_shifter_reg U1(.clk(clk), .rst(rst), .din(din), .dout(dout));
    
    endmodule

    在Modelsim中仿真所得波形图如下:



    三、计数器加组合输出网络类型


    计数型序列信号发生器的结构框图如上图示:它由计数器和组合输出网络两部分组成,序列信号从组合输出网络输出。这种类型的序列信号发生器一般分两步来设计,首先根据序列的长度M设计模M计数器,计数器的状态可以自定;然后按计数器的状态转移关系和序列码的要求设计组合输出网络。由于计数器的状态设置和输出网络没有直接的关系,因此这种结构对于输出序列的更改比较方便,而且还能同时产生多组序列码。

    下面描述的为计数器加组合输出网络构成的序列信号发生器,产生001011序列信号,通过内部的3位计数器进行计数,由计数状态和输出序列的对应关系,得到其输出组合逻辑真值表,从表中可以看到,Q2Q1Q0从000开始计数并不断加1,每个状态对应一个输出Z。通过真值表可以得到卡诺图,化简后可以得到输出逻辑函数为: 

    Q2

    Q1

    Q0

    Z

    0

    0

    0

    0

    0

    0

    1

    0

    0

    1

    0

    1

    0

    1

    1

    0

    1

    0

    0

    1

    1

    0

    1

    1

    输出组合逻辑真值表

    下面直接给出verilog HDL 设计代码:

    module counter_sequence(clk, rst, dout);
    	input clk, rst;
    	output dout;
    	reg [2:0] counter;
    	always @(posedge clk)
    		begin
    			if(rst == 1'b1)
    				counter <= 3'b000;
    			else if(counter == 3'b101)
    				counter <= 3'b000;
    			else counter <= counter + 1'b1;
    		end
    	assign dout = ((~counter[0]) & counter[1]) | counter[2];
    endmodule

    测试文件:

    module counter_sequence_tb;
    	reg clk, rst;
    	wire dout;
    	always
    		#10 clk = ~clk;
    		
    	initial
    		begin
    			clk = 1'b0;
    			rst = 1'b0;
    			#10 rst = 1'b1;
    			#20 rst = 1'b0;
    		end
    	counter_sequence U1(.clk(clk), .rst(rst), .dout(dout));
    endmodule

    在Modelsim中仿真所得仿真图:


    展开全文
  • Verilog HDL 之 序列信号发生器 一、原理  在数字电路中, 序列信号是指在同步脉冲作用下循环地产生一串周期性的二进制信号.能产生这种信号的逻辑器件就称为序列信号发生器.根据结构不同,它可分为反馈移位型和...

    Verilog HDL 之 序列信号发生器

    一、原理

      在数字电路中, 序列信号是指在同步脉冲作用下循环地产生一串周期性的二进制信号.能产生这种信号的逻辑器件就称为序列信号发生器.根据结构不同,它可分为反馈移位型和计数型两种。
    移位型序列信号发生器是由移位寄存器和组合电路两部分构成,组合电路的输出,作为移位寄存器的串行输入。
      计数型序列信号发生器能产生多组序列信号,这是移位型发生器所没有的功能.计数型序列信号发生器是由计数器和组合电路构成的。
      本实验的目的就是设计一个序列信号发生器。设计产生序列11100100、11100100、···的计数型序列信号发生器电路。

    二、实现

    在设计文件中输入Verilog代码

    防抖模块

    复制代码
     1  /****************************** 分频模块  *************************************/
     2 
     3 `timescale 1 ns / 1 ps
     4 module qu_dou ( clk ,rst , a ,b  );
     5 
     6 input            clk ;
     7 wire            clk ;
     8 input            rst ;      
     9 input            a ;
    10 wire            a ;
    11 
    12 output            b ;
    13 reg            b ;
    14 
    15 reg        [31:0]    cnt ;
    16 reg             clkout ;
    17 always @ ( posedge clk or negedge rst )
    18     begin 
    19         if ( rst == 1'b0 )
    20             cnt <= 0 ;
    21         else  begin  if ( a==1'b1 ) begin
    22             if ( cnt >= 32'd3000000 ) 
    23             b <= 1 ;
    24             else 
    25             cnt <= cnt + 1'b1 ;
    26             
    27             end
    28             else begin b <= 1'b0 ;
    29                 cnt <= 0 ;
    30             end
    31         end
    32     end
    33 
    34 
    35 endmodule
    复制代码

    功能实现

    复制代码
     1  `timescale 1 ns / 1 ps
     2 
     3 module xlgen ( Q ,clk ,res ,rst ,sysclk );
     4 
     5 input clk ;
     6 wire clk ;
     7 input res ;
     8 wire res ;
     9 input sysclk ;
    10 input rst ;
    11 
    12 output Q ;
    13 reg Q ;
    14 reg [7:0] Q_r ;
    15 
    16 /***************** 例化去抖模块  *************************************/
    17 wire     clk_r ;
    18 qu_dou qu_dou ( 
    19 .clk (sysclk) ,
    20 .rst (rst) , 
    21 .a (clk),
    22 .b  (clk_r));
    23 
    24 //********************************************************************
    25 
    26 always @( posedge clk_r or posedge res)    
    27     begin
    28     
    29         if (res ==1) begin
    30             Q <= 1'b0;
    31             Q_r <= 8'b11100100  ;
    32             end
    33     else  
    34         begin 
    35             Q <= Q_r[7];
    36             Q_r <= Q_r<<1;    
    37             Q_r[0] <=Q;
    38         end      
    39     end
    40     
    41 endmodule
    复制代码
    展开全文
  • 序列信号发生器

    2021-05-17 20:34:16
    Verilog 序列信号发生器的三种设计思路 序列信号发生器:同步脉冲作用下循环地产生一串周期性的二进制信号的逻辑器件。 例如产生:100111 方法1:状态机 选择格雷码,每个状态输出一位 module divider_odd( input ...

    Verilog 序列信号发生器的三种设计思路
    序列信号发生器:同步脉冲作用下循环地产生一串周期性的二进制信号的逻辑器件。
    例如产生:100111

    方法1:状态机

    选择格雷码,每个状态输出一位

    module head(
    input clk,
    input rst_n,
    input load,//数据锁存
    input [5:0] in,//输入序列
    output reg out
    );
    reg [2:0] state;
    reg [5:0] in_reg;
    parameter s0=000,s1='b001,s2='b011,s3='b010,s4='b110,s5='b100;
    always@(posedge clk or negedge rst_n)
    begin
    	if(!rst_n)
    	begin
    		state<=s0;
    		out<=0;
    	end
    	else
    	if(load)
    		begin
    			in_reg<=in;
    			state<=s0;
    		end
    	else
    		case(state)
    		s0:begin
    				state<=s1;
    				out<=in_reg[5];
    			end
    		s1:begin
    				state<=s2;
    				out<=in_reg[4];
    			end
    		s2:begin
    				state<=s3;
    				out<=in_reg[3];
    			end
    		s3:begin
    				state<=s4;
    				out<=in_reg[2];
    			end
    		s4:begin
    				state<=s5;
    				out<=in_reg[1];
    			end
    		s5:begin
    				state<=s0;
    				out<=in_reg[0];
    			end
    		endcase
    end
    endmodule
    

    在这里插入图片描述

    方法2:移位寄存器实现
    左移输出

    module head(
    input clk,
    input rst_n,
    input load,//数据锁存
    input [5:0] in,//输入序列
    output  out
    );
    reg [5:0] in_reg;
    always@(posedge clk or negedge rst_n)
    begin
    	if(!rst_n)
    		in_reg<=0;
    	else
    	if(load)
    			in_reg<=in;
    	else
    			in_reg<={in_reg[4:0],in_reg[5]};
    end
    assign out =rst_n?in_reg[5]:0;
    endmodule
    

    在这里插入图片描述
    如果问:欲用移位寄存器产生序列信号100111,则至少需要多少级触发器
    6位至少需要3级触发器
    3个触发器:100->001->011->111->111 重复,不可以。
    4个触发器:1001->0011->0111->1111->1110->1100->1001,可以
    所以利用移位寄存器至少需要4级触发器

    方法三:计数器

    在这里插入图片描述
    在这里插入图片描述

    module head(
    input clk,
    input rst_n,
    output  out
    );
    reg [5:0] in_reg;
    reg [2:0] cnt;
    always@(posedge clk or negedge rst_n)
    begin
    	if(!rst_n)
    		cnt<=0;
    	else
    		cnt<=cnt+1;
    end
    
    assign out =cnt[2]|((cnt[1])&(~cnt[0]))|(cnt[1]&cnt[0]);
    endmodule
    
    展开全文
  • 该代码是用状态机组织的序列信号发生器,是学习状态机的很好的代码
  • 序列信号发生器的三种实现方式

    千次阅读 2020-09-04 21:48:31
    一、状态转移型的序列信号产生verilog HDL 设计用一个不断循环的状态机,循环产生序列信号001011。过程过于简单,我就不画状态图了。直接给出verilog HDL设计代码://有限状态机方式实现001011序列信号产生 ...
  • 了解序列信号发生器的原理,掌握原理图和语言描述的层次设计方法
  • Verilog HDL 之 序列信号发生器 一、原理  在数字电路中, 序列信号是指在同步脉冲作用下循环地产生一串周期性的二进制信号.能产生这种信号的逻辑器件就称为序列信号发生器.根据结构不同,它可分为反馈移位型和...
  • Verilog作业,模55加法器_信号发生器(fsm)_序列检测器(fsm),包括设计代码,测试代码,仿真波形
  • 基于VerilogHDL的信号发生器的设计
  • 电路工作频率高,缺点:移位寄存器长度取决于序列长度,电路占用面积大 module signal_maker(clk,reset,dout,load,din,d); parameter width = 4; input clk,reset,load; input [width-1:0] din; output [width-1...
  • Verilog实现m序列发生器

    万次阅读 多人点赞 2015-07-18 13:09:53
    1.m序列简介 m序列是目前广泛应用的一种伪随机序列,其在通信领域有着广泛的应用,如扩频通信,卫星通信的码分多址,数字数据中的加密、加扰、同步、误码率测量等领域。m序列在所有的伪随机序列里面的地位是最...
  • VERILOG HDL编程实现各种信号波形输出
  • 文章目录m序列发生器什么是m序列发生器如何实现m序列发生器如何得到m序列的反馈方程 m序列发生器 什么是m序列发生器 m序列发生器的概念在《数字电路》这门课里讲的比较详细了,这里就不给大家详细复习了。简而言之,...
  • 此程序是用verilog语言实现的伪随机序列,程序里面对同步字节、数据包、数据帧都有说明,使得程序明白易懂。 此程序是用verilog语言实现的伪随机序列,程序里面对同步字节、数据包、数据帧都有说明,使得程序明白...
  • 序列发生器、序列校验器、序列检测器一条龙服务 序列发生器:产生指定序列 author : Mr.Mao e-mail : 2458682080@qq.com module seq_generator( input clk , input rst_n , output reg data ); //规定输出...
  • Verilog -- 序列发生器的设计

    千次阅读 2020-06-21 12:59:10
    Verilog序列发生器的设计 @(verilog) 文章目录Verilog -- 序列发生器的设计1. 题目2. 思路1 - 状态机实现3. 思路2 - 移位寄存器实现4. 思路3 -- 计数器+组合逻辑 1. 题目 产生序列信号11010111至少需要几级...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 866
精华内容 346
关键字:

序列信号发生器verilog