FPGA同步时序电路设计-FPGA常见问题论坛-FPGA CPLD-ChipDebug

FPGA同步时序电路设计

 

1、实验目的

掌握典型同步时序电路的工作原理和设计方法

掌握时序电路的激励函数、状态图、状态方程的运用

掌握用 Verilog 进行有限状态机的设计、调试、仿真

掌握用 FPGA 实现时序电路功能

2、实验内容

任务 1:原理图方式设计 4 位同步二进制计数器

任务 2:以 Verilog 行为描述方式设计 16 位可逆二进制同步计数 器

3、实验过程

任务 1:原理图方式设计 4 位同步二进制计数器

1.创建工程并创建组件

建立 HDL 工程 MyCounter,创建原理图文件 Counter4b,按原理 图绘制。

图片[1]-FPGA同步时序电路设计-FPGA常见问题论坛-FPGA CPLD-ChipDebug

新建 Verilog 文件 clk_1s 用作时钟,输入如图的 Verilog 代码

图片[2]-FPGA同步时序电路设计-FPGA常见问题论坛-FPGA CPLD-ChipDebug

新建 Verilog 文件 Top,右键设为 Set as Top Module,输入如图的 Verilog 代码

图片[3]-FPGA同步时序电路设计-FPGA常见问题论坛-FPGA CPLD-ChipDebug

2.原理图仿真

建立基准测试波形文件 Counter4b_sim,输入仿真激励信号,在 Process 窗口中选择 Simulate Behavioral Model,可以得到仿真波 形图:

图片[4]-FPGA同步时序电路设计-FPGA常见问题论坛-FPGA CPLD-ChipDebug

图片[5]-FPGA同步时序电路设计-FPGA常见问题论坛-FPGA CPLD-ChipDebug

3.建立用户时序约束并为模块的端口指定引脚分配

建立引脚约束文件 K7.ucf,输入代码如图 3.6 所示,为原理图的 每个输入输出端口分配引脚。

图片[6]-FPGA同步时序电路设计-FPGA常见问题论坛-FPGA CPLD-ChipDebug

4.生成 bit 文件并下载到开发板

任务 2:以 Verilog 行为描述方式设计 16 位可逆二进制同步计数器

1.创建工程并绘制原理图

建立 HDL 工程 myRevCounter,创建 Verilog 文件 RevCounter

图片[7]-FPGA同步时序电路设计-FPGA常见问题论坛-FPGA CPLD-ChipDebug

新建 Verilog 文件 clk_100ms 用作时钟,输入如图的 Verilog 代码

图片[8]-FPGA同步时序电路设计-FPGA常见问题论坛-FPGA CPLD-ChipDebug

新建 Verilog 文件 Top,右键设为 Set as Top Module,输入如图的 Verilog 代码

图片[9]-FPGA同步时序电路设计-FPGA常见问题论坛-FPGA CPLD-ChipDebug

2.原理图仿真

建立基准测试波形文件 RevCounter_sim,输入仿真激励信号, 在 Process 窗口中选择 Simulate Behavioral Model,可以得到仿真 波形图:

图片[10]-FPGA同步时序电路设计-FPGA常见问题论坛-FPGA CPLD-ChipDebug

图片[11]-FPGA同步时序电路设计-FPGA常见问题论坛-FPGA CPLD-ChipDebug

3.建立用户时序约束并为模块的端口指定引脚分配

建立引脚约束文件 K7.ucf,输入代码如图 3.6 所示,为原理图的 每个输入输出端口分配引脚。

图片[12]-FPGA同步时序电路设计-FPGA常见问题论坛-FPGA CPLD-ChipDebug

4.生成 bit 文件并下载到开发板

4、实验结果

先要感谢某不烦学长,救我一命,当时真的卡了很久,没想到有学长发了实验的专栏

我也后来去问了老师原因,DispNum中是不可以用clk_100ms这些的,因为时间太短,扫描得太快,所以显示出的数字就和预想的不一样,调成系统时钟clk就好了

分频器多看看,posedge是上升沿,别忘了,1个上升沿是半个周期,再过一个下降沿才是完整的一个周期

clk 是 100MHz 的信号,当进行 50_000_000 次分频后,clk_1s 会变化一次,而再过一个 50_000_000 次分频后就会 再变化一次,所以 clk_1s 的周期是 2 次 50_000_000(50MHz)次分频, 所以就把 1 个 100MHz 的信号转换成了一个 1Hz 的信号

请登录后发表评论

    没有回复内容