zxopenljx 发表于 2020-5-4 13:56:39

动态显示之仿真分析

前几天我们把数码管循环移位的所有构思、实现方法以及源代码和大家一一作了分享,今天我们通过分析仿真波形,来验证一下我们设计的正确性。

仿真分为:功能仿真和时序仿真。今天我们是应用的功能仿真,只需验证功能的正确性即可。

时序仿真(后仿、门级网表仿真):需要全编译(Ctrl + L)      

功能仿真(前仿、RTL仿真):

WF文件(操作简单,只能够仿真功能简单的设计)
Modelsim(写代码,设置Modelsim的仿真文件路径,操作复杂)

让Modelsim知道测试文件是and_gate_tb,需要进行设置,设置步骤如下:
Assignments——Settings——Simulation——Compile test bech——new(setting)

Modelsim操作步骤:
1.停止波形(点击STOP)
2.去端口信号路径(toggle leaf name)
3.设置分组(Group)
4.清除波形,再刷新(restart--->run-all)
5.全局缩小(zoomfull)
6.设置进制(方便查看波形)
7.设置标线(方便查看波形)

接下来我们一起来看一下仿真波形。
首先是分频模块(如图一)

从波形可以看出,我们达到了我们的目的。产生了一个频率为1kHZ的驱动。



而后是移位模块(如图二)

从上面波形可以看到:每当flag信号拉高一次,我们的数据date_in就会向右循环移位一次。
数据变化为:
012345 501234450123345012 234501123450012345
这就说明我们的字符HELLO.可以正常循环移位,我们的设计功能正确。

还有一点,就是我们可以看到:当flag拉高时,我们的数据没有立即发生移位,然是晚了一个时钟周期才变化。
这是因为我们的flag标志信号是通过组合逻辑写的,移位模块是通过时序逻辑写的。而时序逻辑的输出会比组合逻辑输出晚一个时钟周期(这是由内部结构决定的)。
{时序逻辑在输出时要比组合逻辑多通过一个寄存器,这一个时钟周期就是从这里差出来的}

为了方便查看波形数据,我们需要将部分数据的进制数设置一下:
temp、cnt设置为unsigned(无符号数),把date、date_in设置为Hexadecimal(十六进制)


最后我们来看一下整体的波形数据:(如图三)


今天的分享就到这里。至此,我们的数码管循环移位工程就全部分享完毕。

zhangyukun 发表于 2020-5-4 16:02:49

动态显示之仿真分析

zxopenljx 发表于 2023-8-22 16:54:26

动态显示之仿真分析
页: [1]
查看完整版本: 动态显示之仿真分析