在数字信号传输的过程中,有时会需要产生一组特定的串行数字信号,产生这种序列信号的电路称为序列信号发生器。
通过数字信号设计与Verilog代码理解序列信号发生器;下面介绍几种Verilog编程中常用的方法。
1、环形移位寄存器
例如需要发出一组100111的一组6位序列数。首先确定需要知道N位环形寄存器由N位寄存器组成
module signal_maker (
//system signals
input clk ,
input load ,
input [5:0] D ,
//
output out
);
initial Q=100111;
reg[5:0] Q;
always @(posedge clk )begin
if (load)
Q<=D;
else
Q <= {Q[4:0],Q[5]};
end
assign out = Q[5];
endmodule
2.反馈移位寄存器
该序列信号产生器不像环形移位寄存器一样,寄存器的多少取决于序列的长度。它由移位寄存器与组合逻辑电路组成。
(1)首先根据序列信号的循环周期M,来确定序列的寄存器位数n,由M=6可暂时计算最佳n的值为3,即用3位寄存器来循环100111。
(2)确定寄存器的M个状态,100,001,011,111,111,110。在这六个状态中111重复,因此寄存器位数需加1,n=4,重新确认状态:1001,0011,0111,1111,1110,1100,状态无重复。
(3)根据状态确定移位寄存器的态序表和反馈函数表,求出反馈函数F
反馈移位序列信号发生器Verilog代码:
module signal_maker (
//system signals
input clk ,
input load ,
input [3:0] D ,
//
output out
);
wire w;
reg[3:0] Q;
always @(posedge clk )begin
if (load)
Q<=D;
else
Q <= {Q[2:0],w};
end
assign w = (~Q[3]) | ( (~Q[1]) & (~Q[2]) ) | ( Q[3] & (~Q[2]) );
assign out = Q[3];
endmodule
3.计数器+组合逻辑电路(100111)
此电路和反馈序列信号发生器大致相同,都是由时序电路与组合电路构成,不同在于反馈序列信号发生器的时序状态由移位寄存器构成,输出信号取最高位,而计数序列发生器,由计数器代替时序状态的产生,输出由组合电路产生。
首先确定计数模值M=6,因此可知计数器状态从000——101可表示这六个序列数字。
接下来可以得到输出的组合逻辑真值表。
计数序列信号发生器Verilog代码:文章来源:https://www.toymoban.com/news/detail-449032.html
module signal_maker (
//system signals
input clk ,
input rst ,
//
output out
);
reg [2:0] cnt;
always @(posedge clk )begin
if (!rst)
cnt<=3'd0;
else
cnt<=cnt+1'b1;
end
assign out = cnt[2] | ( (~cnt[1]) & (~cnt[0]) ) | (cnt[1] & cnt[0]);
endmodule
注释:反馈移位序列信号发生器是由移位寄存器组成的,寄存器的输出是由高位先输出,每次移动一位进来,当1001时,更新下一个状态需要输入一位,由100111可知,下一位为1,依此类推就可以写出态序图。计数序列信号发生器因为由计数器来更新状态,所以当为000时对应100111中第一个输出的数,因此先输出高位,依此写出输出真值表。文章来源地址https://www.toymoban.com/news/detail-449032.html
到了这里,关于【序列信号发生器(IC)】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!