FPGA 入门 —— D 触发器仿真
FPGA 入门 —— D 触发器仿真
实验目的
-
在 Quartus 中自己用门电路设计一个 D 触发器,并进行仿真,时序波形验证
-
在 Quartus 中直接调用一个 D 触发器电路,进行仿真,时序波形验证,与 1 做比较
-
在 Quartus 中用 Verilog 语言写一个 D 触发器,进行仿真验证,与 2 做比较
实验原理
前面我们已经介绍了 D 触发器和一些相关的原理,如果还不知道什么是 D 触发器的可以看我的前一篇博客:FPGA 入门 —— D 触发器入门
新建项目
这里我们选择新建项目的路径:
![](https://img2022.cnblogs.com/blog/2829072/202211/2829072-20221112172320809-1549527666.png)
注意:这里的名称要与 Module 的名称一致,不然要报错
这里我们选择新建空项目:
![](https://img2022.cnblogs.com/blog/2829072/202211/2829072-20221112172336504-1380135544.png)
我们选择先不添加文件,后面再进行添加:
![](https://img2022.cnblogs.com/blog/2829072/202211/2829072-20221112172509756-2114293494.png)
这里我们使用的型号是 EP4CE6F17C8 ,属于 Cyclone IV 系列,Core speed grade(堆芯速度等级)为 8 ,Pin count(引脚数量)为 256 ,我们可以先确定这两个参数,然后下面出现的第一个型号就是我们需要的:
![](https://img2022.cnblogs.com/blog/2829072/202211/2829072-20221112172418500-415564227.png)
由于我们使用的是 Altera 的开发板,所以这里需要使用 ModelSim-Altera ,开发语言选择 Verilog HDL 语言:
![](https://img2022.cnblogs.com/blog/2829072/202211/2829072-20221112172529881-1905666741.png)
下图页面是一些数据和配置信息:
![](https://img2022.cnblogs.com/blog/2829072/202211/2829072-20221112172542138-1105921947.png)
门电路设计 D 触发器
D 触发器设计
首先我们需要新建原理图文件:
![](https://img2022.cnblogs.com/blog/2829072/202211/2829072-20221113004357842-1984994970.png)
![](https://img2022.cnblogs.com/blog/2829072/202211/2829072-20221113004436677-685182940.png)
这里我们需要知道 D 触发器的原理图:
![](https://img2022.cnblogs.com/blog/2829072/202211/2829072-20221112145329605-173217142.png)
然后我们需要添加
![](https://img2022.cnblogs.com/blog/2829072/202211/2829072-20221113004619033-2021846735.png)
我们可以直接查找对应的元器件或者输入元器件名称直接查找:
![](https://img2022.cnblogs.com/blog/2829072/202211/2829072-20221113004754008-1930746979.png)
D 触发器需要 4 个 nand2 与非门,1 个 not 非门,2 个输入管脚和 2 个输出管脚,并连线,最终如下图:
![](https://img2022.cnblogs.com/blog/2829072/202211/2829072-20221113011412666-1442027167.png)
编译
我们已经设计了 D 触发器的原型,这里要进行编译,无报错可以进行下一步:
![](https://img2022.cnblogs.com/blog/2829072/202211/2829072-20221113013214013-1048830834.png)
这里我们点击报错信息,这里没有报错就说明可以进行下一步
查看硬件电路图
这里我们需要查看硬件电路图,看是否合理,不合理就要进行修改:
![](https://img2022.cnblogs.com/blog/2829072/202211/2829072-20221113110827150-377994577.png)
这里我的硬件电路图如下:
![](https://img2022.cnblogs.com/blog/2829072/202211/2829072-20221113111546326-400769619.png)
波形仿真
新建波形图文件:
![](https://img2022.cnblogs.com/blog/2829072/202211/2829072-20221113112010396-896345806.png)
选择要输入的波形:
![](https://img2022.cnblogs.com/blog/2829072/202211/2829072-20221113112237457-1721153064.png)
![](https://img2022.cnblogs.com/blog/2829072/202211/2829072-20221113112628471-209443456.png)
然后点击 OK 即可看到如下波形:
![](https://img2022.cnblogs.com/blog/2829072/202211/2829072-20221113112854178-486685056.png)
编辑输入 CLK ,产生时钟信号:
![](https://img2022.cnblogs.com/blog/2829072/202211/2829072-20221113113226042-961692891.png)
![](https://img2022.cnblogs.com/blog/2829072/202211/2829072-20221113113253794-228933410.png)
输入 D 中随机选取几段设置高/低电平:
![](https://img2022.cnblogs.com/blog/2829072/202211/2829072-20221113113757373-491547178.png)
功能仿真
点击进行仿真:
![](https://img2022.cnblogs.com/blog/2829072/202211/2829072-20221113141844226-1076631686.png)
调用 D 触发器
这里我们需要重新创建项目
前面的步骤均相同,这里我们选择直接添加 D 触发器进行仿真,元件名为 dff :
![](https://img2022.cnblogs.com/blog/2829072/202211/2829072-20221113163642745-2115422608.png)
编译
![](https://img2022.cnblogs.com/blog/2829072/202211/2829072-20221113190258852-1863752608.png)
波形仿真
这里我们波形仿真的方法和上面的仿真方法一样,就不进行过多介绍了
![](https://img2022.cnblogs.com/blog/2829072/202211/2829072-20221113141844226-1076631686.png)
Verilog HDL 实现 D 触发器
代码设计
D 触发器代码:
module Delayff(D,CLK,Q);
input D;
input CLK;
output Q;
reg Q;
always @ (posedge CLK)//我们用正的时钟沿做它的敏感信号
begin
Q <= D;//上升沿有效的时候,把d捕获到q
end
endmodule
仿真测试代码:
`timescale 1ns / 1ns
module Delayff_tb;
reg CLK,D;
wire Q;
Delayff u1(.D(D),.CLK(CLK),.Q(Q));
initial
begin
CLK = 1;
D <= 0;
forever
begin
#60 D <= 1;//人为生成毛刺
#22 D <= 0;
#2 D <= 1;
#2 D <= 0;
#16 D <= 0;//维持16ns的低电平,然后让它做周期性的循环
end
end
always #20 CLK <= ~CLK;//半周期为20ns,全周期为40ns的一个信号
endmodule
绑定仿真项
我们需要在这里绑定我们的仿真的源代码文件:
这里仿真软件需要选择 Model-Altera ,然后 Test Benches 文件选择我们的仿真代码文件:
这里选择新建:
这里需要先点击 add 再点 ok
最后添加完成就可以进行仿真了
运行仿真
这里不采用通过代码仿真,采用和上述同样的仿真方式,就不过多介绍
运行测试
仿真结果
门电路设计 D 触发器仿真结果
时序仿真结果如下:
功能仿真结果如下:
调用 D 触发器仿真结果
时序仿真结果如下:
功能仿真结果如下:
代码设计 D 触发器
时序仿真结果如下:
功能仿真结果如下:
结果分析
时序仿真结果与功能仿真结果相同,均为延迟了半个时钟周期,说明我们设计的 D 触发器没有问题
报错解决方案
报错如下:
解决方法如下:
需要手动添加 ModelSim ,过程如下:
22.cnblogs.com/blog/2829072/202211/2829072-20221113154400352-558146278.png)
这里需要选择我们下载安装的 ModelSim 目录下的 Win64 文件夹,然后需要选择我们的目标输出文件夹:
出现如下界面说明 ModelSim 添加成功:
![](https://img2022.cnblogs.com/blog/2829072/202211/2829072-20221113154027018-1601370384.png)
报错如下:
在添加 ModelSim 可能会中出现如下报错:
解决方法如下:
在下载安装 Quartus 时,我们安装的是 ModelSimilar-Altera 而不是通用的 ModelSim ,我们需要安装 ModelSim 再添加即可
报错如下:
解决方法如下:
保存 vmf 文件时,保存在默认路径即可。或者在 vmf 文件里 Simulation 的配置中修改 testbench 文件的路径
修改 testbench 路径过程如下:
注意:这里两个的文件名要一致,不然会发生报错
报错如下:
直接进行时序仿真会发生报错:
解决方法如下:
需要进行相关编译:
如果我们一开始就进行全部编译,就不会出现上述报错