【Quartus入门】FPGA实训第一周
文章目录
环境:
quartus 18.1 lite版
modelsim altera 18.1 lite版
1.D触发器基本原理
D触发器是CMOS数字集成电路单元中时序逻辑电路中的重要组成部分之一,学习D触发器具有十分重要的意义,可以帮助了解数字集成电路的单元。
D触发器属于时钟控制触发器,一般而言,时钟控制的触发器可以分成三大类:
第一类时钟控制触发器要求时钟信号的脉冲宽度小于触发器的传输延迟,即时钟信号先为高,接着必须在触发器的输出状态改变之前变为低。
第二类时钟控制触发器的特点是,时钟信号为高电平时触发器改变输出状态,通常称这种触发器为电平敏感触发器(锁存器Latch)。
第三类触发器的特点是边沿触发,时钟信号的上升/下降沿会使触发器改变输出状态(寄存器Register)。
D触发器(data flip-flop)也称为维持-阻塞边沿D触发器,由六个与非门组成,其电路图及其逻辑符号如下图所示。其中G1和G2构成基本的RS触发器,G3和G4构成时钟控制电路,G5和G6组成数据输入电路。由于 分别为复位端和置位端,在分析D触发器工作原理时均视为高电平,以保证不影响电路工作。
方程
Q(n+1)=D
功能表
2.用控件创建D触发器并仿真
2.1新建项目
File->New Project Wizard:
点击Next
设置工程的存储位置和项目名称
点击Next
选择目标芯片:cycloneIVE系列的EP4CE115F29C7
点击Next
点击finish
2.2创建D触发器原理图
首先打开QuartusII,选菜单“File”一“New”,在弹出的“New-”对话框中选择“ Design Files” 的原理图文件编辑输入项“Block block diagram/schematic File"按"OK"后将打开原理图编辑窗。
通过编辑工具,利用4 个 nand2 与非门,1 个 not 非门,2个输入管脚和2个输出管脚,并连线,最终如下图:
先进行全局编译,看是否出错
将做的图,生成硬件电路图,更方便查看
生成的硬件电路图如下,符合D触发器特性
2.3编译仿真
新建波形文件。如上面新建图形文件的方法,从“file”中选择“new”,然后从出现的对话框中选择“university program VWF”。
点击“OK”。
输入波形文件。在波形文件编辑器左端大片空白处双击,出现“insert node or bus”对话框,点击“node finder”按钮。然后在随后出现的“node finder”对话框中点击“list”按钮,则半加器中所有的输入输出引脚全部出现在对话框左边。再在该界面上点击“>>”,则把左边所有的端口都选择到右边,进入波形,如图。
编辑输入CLK,产生时钟信号
把输入D随便设置几个低电平和高电平
点击功能仿真编译按钮:
仿真结果如下,画圈处和时钟周期做对比确实延迟了半个周期
点击时序仿真按钮:
时序结果如下,画圈处和时钟周期做对比确实延迟了一个周期
时序仿真图:
3.直接调用D触发器并仿真
3.1新建项目
步骤和2.1同
3.2创建D触发器原理图
此处是直接调用D触发器
再添加输入和输出管脚。最终原理图如下:
编译没有出错,然后生成查看硬件电路图
3.3编译仿真
具体步骤与2.3仿真步骤相同
结果如下,画圈处和时钟周期做对比确实延迟了半个周期
功能仿真波形图:
结果如下,画圈处和时钟周期做对比确实延迟了一个周期
时序仿真波形图:
4.用verilog语言编写D触发器并仿真
4.1用verilog语言创建D触发器原理图
4.1.1配置vscode
下载vscode并且装上相应的插件,特别是Verilog-HDL/SystemVerilog/Bluespec SystemVerilog此插件非常重要,然后继续将vscode配置modelsim进行语法检错,语法检错参考博客https://blog.csdn.net/weixin_43828944?type=blog
最后设置自动保存。(既然用了vscode就可以继续去发现更多好用的插件来帮助自己写verilog代码,目的也在于此)
4.1.2代码编写
配置好后,继续新建文件夹,下图是一个文件路径参考,即先建一个code文件,然后此次项目的触发器文件D,D文件下继续新建三个文件,prj用来保存项目,,rtl保存实现功能的代码文件,tb保存仿真代码文件
在rtl,和tb文件下新建空的.v文档,用vscode打开,开始编写代码
dwave.v代码如下
//dwave是文件名
module dwave(D,CLK,Q);
input D;
input CLK;
output Q;
reg Q;
always @ (posedge CLK)//我们用正的时钟沿做它的敏感信号
begin
Q <= D;//上升沿有效的时候,把d捕获到q
end
endmodule
dwave_tb.v代码如下
//测试代码
`timescale 1ns / 1ns
module dwave_tb;
reg CLK,D;
wire Q;
dwave 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
4.1.3新建项目
项目保存到prj文件下,其余与2.1相同步骤
建好文件后,双击下图第二步,进入添加页面
点击三个点处,添加写得两个.v代码文件
添加好后,点击Tools->Options->EDA Tool Options,在下图处导入如下路径
完成后,准备配置Test Benches,点击Assignmens->Settings,随后依次按下图打开选项框,第四步是找到仿真文件,并且点击open
最后按下图二三步配置名字,名字即是导入的文件名,最后点击add,然后依次点击ok,完成其余的选项框
4.2编译仿真
点击全编译,没有报错
查看硬件原理图,也没问题
打开仿真
找到sim窗口,添加u1
找到wave窗口,依次点击->Restar->Run all->zoom full->Zoom In On Active Cursor,得到如下仿真波形,具体的实际操作页面可能和本人的不一样,因为在仿真界面本人还进行了黑波白底设置,工具栏调整
5.总结
首次接触fpga,对于这门语言的编写掌握是不足的,但是学起来感觉和c差距不大,较容易上手,然后本次作业的难点在于编译仿真部分,可能会报出各种各样的错误,但是一般网上都有解决方案,其次就是完成写verilog代码并且编译仿真这个步骤,做这个步骤时一定要掌握特定的流程,比如怎么新建文件,用什么软件写代码(vscode书写确实可以装很多插件,很方便),如何导入等,掌握后,一直按照标准流程来,省时省力也不容易出错
6.参考
https://blog.csdn.net/weixin_46129506/article/details/123443865