Verilog实现序列信号发生器

长度为n=6的序列信号110111

循环移位寄存器

会消耗较多的寄存器资源。需要n个寄存器,也就是6个。
由于输入输出之间没有组合电路,不需要组合逻辑反馈运算,因此电路工作频率高,但问题在于移位寄存器的长度取决于序列长度,占用电路面积大。

module seq_gen(
input                                   clk,
input                                   rst_n,
output                                  seq );

reg [5:0]out_seq;
always@(posedge clk or negedge rst_n)
  if(!rst_n) out_seq <= 8'b110111;
  else out_seq <= {out_seq[4:0],out_seq[5]};
assign seq = out_seq[5];

循环移位寄存器+组合逻辑电路

其设计按以下步骤进行:
(1)根据给定序列信号的循环周期n,确定移位寄存器位数m,2^(m-1) <n≤ 2^m
(2)确定移位寄存器的n个独立状态。将给定的序列码按照移位规律每m位一组,划分为n个状态。若n个状态中出现重复现象,则应增加移位寄存器位数。用m+1位再重复上述过程,直到划分为n个独立状态为止.
(3)根据n个不同的状态列出移位寄存器的态序表和反馈函数表,求出反馈函数F的表达式。

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

always @(posedge clk)
if(load)
Q<=D;
else
Q<={Q[2:0],w1};
assign w1=(~Q[3])|((~Q[1])&(~Q[0]))|(~Q[3]&(~Q[2]));
assign out=Q[3];

计数器+组合逻辑

序列信号的长度为6,需选用模6计数器,寄存器3个。
根据计数值列输出真值表
在这里插入图片描述
在这里插入图片描述

always @(posedge clk)
if(!reset) 
count<=3'b000;
else 
counter<=counter+1;
assign out=counter[2]|((counter[1])&(~counter[0]))|(counter[1]&counter[0]);

https://blog.csdn.net/qq_38573940/article/details/109440396

  • 0
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值