终于迈向了testbench的学习,第一个就拿简单的练练手,没想这都遇到了好几个问题,在一番折腾下,终于把问题调试完毕,趁热乎过来写下本人的第一篇博客。。序列信号检测器对串行输出进行检测,如果检测到连续的1001,则输出1,否则输出0。
程序采用两段式状态机写法。两段式状态机即:用两个always模块来描述状态机,其中一个always模块采用同步时序描述状态转移,另外一个模块采用组合逻辑判断状态转移条件,描述状态转移规律以及输出。状态机编码方式采用独热码方式,《Verilog数字系统设计与FPGA应用》【赵倩、林丽萍】一书中说:“CPLD器件更多地提供组合逻辑资源,而FPGA器件更多的提供触发器资源,所以对于CPLD的数字系统设计多使用格雷码编码,而基于FPGA的数字系统设计多使用独热码编码。”代码如下:
Detected_1001.v
1 module Detected_1001(Data_in,Clock,Reset,Detected); 2 3 input Data_in,Clock,Reset; 4 output Detected; 5 reg Detected; 6 reg [4:0]state; 7 parameter s0=5'b10000, 8 s1=5'b01000, 9 s2=5'b00100, 10 s3=5'b00010, 11 s4=5'b00001; 12