我是靠谱客的博主 自信夕阳,这篇文章主要介绍Verilog---项目导向D5---2020/3/22,现在分享给大家,希望可以做个参考。

1.代码实现:有限状态机

一、设计一个“111”的序列检测器,当输入3个或3个以上“1”时,电路输出1,否则输出0
(1)状态转移图方法:在这里插入图片描述
代码实现:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
//设计一个“111”的序列检测器,当输入3个或3个以上“1”时,电路输出1,否则输出0 module checker(z,x,clk); parameter s0=2'b00,s1=2'b01,s2=2'b10,s3=2'b11; output z; input clk,x; reg [1:0]state,next_state; reg z; always@(posedge clk) case(state) s0:if (x) begin next_state<=s1; z=0; end else begin next_state<=s0; z=0; end s1:if (x) begin next_state<=s2; z=0; end else begin next_state<=s0; z=0; end s2:if (x) begin next_state<=s3; z=1; end else begin next_state<=s0; z=0; end s3:if (x) begin next_state<=s3; z=1; end else begin next_state<=s0; z=0; end endcase always@(posedge clk) state<=next_state; endmodule

仿真代码:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
`timescale 1ns / 1ps//定义仿真模块的单位时间和精度 //一般将待测试模块的输入设置为reg,输出设置为wire即可 module checker_111_tb(); reg clk; reg x; wire z; //待测试模块例化 ,第一个名称为待测试模块名称,第二个名称符合命名规范随意设置一个名称即可 //输入输出设置按如下形式设置,testbench中名称最好沿用待测试文件中名称,方便编写 checker checker_111_1( .z(z), .clk(clk), .x(x) ); //起始语句,只执行一次 //#10表示样式十个单位时间(本文一个单位时间设置为1ns) initial begin clk<=0; x<=0; #10; #10 x = 1; #10 x = 1; #10 x = 0; #10 x = 0; #10 x = 1; #10 x = 1; #10 x = 1; #10 x = 1; #10 x = 0; #10 x = 0; #10 x = 0; end //设置时钟 always #5 clk<=~clk; endmodule

第五章 仿真验证与Testbench编写

一、验证阶段:
1.功能验证
2.综合后验证
3.时序验证
4.板级验证

二、Testbench示例:
//design RTL的module名叫TTF

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
module Tflipflop_tb; //数据类型声明 reg clk,rst_n,T; //一般输入用reg wire data_out; //一般输出用wire TFF U1( //被测模块实例化 .data_out(data_out), .T(T), .clk(clk), .rst(rst) ); //产生测试激励 always #5 clk<=~clk; initial begin clk = 0; #3 rst_n = 0; #5 rst_n = 1; T = 1; #30 T=0; #20 T=1; end initial begin $monitor($time,"T=%b,clk=%b,data_out=%b",T,clk,rst_n,data_out); end endmodule

三、打印文本输出
在这里插入图片描述
四、关键字
$ display打印后自动换行,$write输出特定信号后不换行
$ monitor, 当参数列表中的变量或表达式变化时,输出
$ strobe:所有时间处理完后,以10进制格式输出格式化文本
$ strobeb:所有时间处理完后,以2进制格式输出格式化文本
$ strobeo:所有时间处理完后,以8进制格式输出格式化文本
$ strobeh:所有时间处理完后,以16进制格式输出格式化文本
$ finish:结束并跳出程序
$ stop:停止但不跳出程序
$time:得到系统时间
$realtime:得到实数型的时间

例子:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(4)延迟:
串行延时begin end(相对时间)和并行延时fork join(绝对时间)
阻塞赋值(相对时间)和非阻塞赋值(绝对时间)

最后

以上就是自信夕阳最近收集整理的关于Verilog---项目导向D5---2020/3/22的全部内容,更多相关Verilog---项目导向D5---2020/3/22内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(68)

评论列表共有 0 条评论

立即
投稿
返回
顶部