【FPGA】高云FPGA之数字钟实验->HC595驱动数码管(三)

简介: 【FPGA】高云FPGA之数字钟实验->HC595驱动数码管

【FPGA】高云FPGA之数字钟实验->HC595驱动数码管(二)https://developer.aliyun.com/article/1472643


3、分析和综合

当逻辑输入设计完成后需要对其进行验证,该部分由软件部分进行验证,如果逻辑输入有问题需要检查语法错误或则重新设计设计输入

4、功能仿真

当分析和综合通过后应该进行功能性验证,针对项目设计定义的功能使用设计的逻辑输入验证其功能能否实现,一般的做法都是通过功能仿真的方式进行验证,比如软件逻辑分析仪,modelsim、vivado等软件自带的仿真工具进行仿真验证

功能仿真也称为行为仿真,主旨在于验证电路的功能是否符合设计要求,其特点是不考虑电路门延迟与线延迟,主要是验证电路与理想情况是否一致。也可以叫做RTL仿真(test bench)

6.1 hex8模块仿真

`timescale 1ns/1ns
`define clk_period 20
module hex8_tb;
reg clk;  //50M
reg reset_n;
reg en; //数码管显示使能,1使能_0关闭
reg [31:0]disp_data;
wire [7:0] sel;//数码管位选(选择当前要显示的数码管)
wire [6:0] seg;//数码管段选(当前要显示的内容)
hex8 hex8(
    .clk(clk),
    .reset_n(reset_n),
    .en(en),
    .disp_data(disp_data),
    .sel(sel),
    .seg(seg)
);
initial clk = 1;
always#(`clk_period/2) clk = ~clk;
initial begin
    reset_n = 1'b0;
    en = 1;
    disp_data = 32'h12345678;
    #(`clk_period*20);
    reset_n = 1;
    #(`clk_period*20);
    #20000000;
    disp_data = 32'h87654321;
    #20000000;
    disp_data = 32'h89abcdef;
    #20000000;
    $stop;
end
endmodule

6.2 HC595模块

`timescale 1ns/1ns
`define clk_period 20
module hc595_tb;
reg clk;
reg reset_n;
reg [15 : 0] data;  //data to send
reg s_en; //send en
wire sh_cp; //shift clock
wire st_cp; //latch data clock
wire ds;  //shift serial data
  
hc595 hc595_mod(
    .clk(clk),
    .reset_n(reset_n),
    .data(data),
    .s_en(s_en),
    .sh_cp(sh_cp),
    .st_cp(st_cp),
    .ds(ds)
);
initial clk = 1;
always#(`clk_period/2) clk = ~clk;
initial begin
    reset_n = 1'b0;
    s_en = 1;
    data = 16'b1010_1111_0110_0101;
    #(`clk_period*20);
    reset_n = 1;
    #(`clk_period*20);
    #5000;
    data = 16'b0101_0101_1010_0101;
    #5000;
    $stop;
end
endmodule 

5、布局布线

当我们的IO可以开始分配了我们首先需要分配IO,如果当前还没到IO分配的时候我们可以将IO分配放在最后,当IO分配完成后我们就可以通过软件进行布局布线,在芯片内部生成芯片电路

6、时序仿真

时序仿真也称为布局布线后仿真,是指电路已经映射到特定的工艺环境以后,综合考虑电路的路径延迟与门延迟的影响,验证电路能否在一定时序条件下满足设计构想的过程,能较好地反映芯片的实际工作情况,当时序仿真不通过的时候可能还会设计到时序约束的一个过程(在比较复杂的设计中也需要用到);这个在上一个步骤(功能仿真中)我们已经完成了时序仿真的波形查看

7、IO分配以及配置文件(bit流文件)的生成

如果在布局布线时未进行IO分配在该步骤进行IO分配并生成BIT流文件,这里我们直接查看小梅哥给出的excel文档,填写我们需要输出的时钟引脚;

//Copyright (C)2014-2023 Gowin Semiconductor Corporation.
//All rights reserved. 
//File Title: Physical Constraints file
//Tool Version: V1.9.9 (64-bit)
//Part Number: GW5A-LV25UG324C2/I1
//Device: GW5A-25
//Device Version: A
//Created Time: Sat 02 17 19:32:14 2024
IO_LOC "ds" F4;
IO_PORT "ds" PULL_MODE=NONE DRIVE=8 BANK_VCCIO=3.3;
IO_LOC "st_cp" F3;
IO_PORT "st_cp" PULL_MODE=NONE DRIVE=8 BANK_VCCIO=3.3;
IO_LOC "sh_cp" H4;
IO_PORT "sh_cp" PULL_MODE=NONE DRIVE=8 BANK_VCCIO=3.3;
IO_LOC "reset_n" B16;
IO_PORT "reset_n" PULL_MODE=NONE BANK_VCCIO=3.3;
IO_LOC "clk" T9;
IO_PORT "clk" PULL_MODE=NONE BANK_VCCIO=3.3;

到这里软件的模拟仿真验证就完成了最后是烧录到板子上进行测试验证

8、配置(烧录)FPGA

时序通过了后需要通过硬件进行验证也就是最后一步的实物验证

9、在线调试

当系统出现问题运行不正常我们可以通过外部硬件示波器或者逻辑分析仪进行实际引脚信号抓取分析

目录
打赏
0
2
4
0
8
分享
相关文章
FPGA入门(6):数码管静态/动态显示(二)
FPGA入门(6):数码管静态/动态显示(二)
134 10
FPGA进阶(1):基于SPI协议的Flash驱动控制(二)
FPGA进阶(1):基于SPI协议的Flash驱动控制
122 0
FPGA进阶(1):基于SPI协议的Flash驱动控制(一)
FPGA进阶(1):基于SPI协议的Flash驱动控制(一)
366 0
FPGA强化(9):TFT_LCD液晶屏驱动
FPGA强化(9):TFT_LCD液晶屏驱动
143 0
FPGA强化(8):HDMI显示器驱动
FPGA入门(8):VGA显示器驱动
98 0
FPGA入门(6):数码管静态/动态显示(一)
FPGA入门(6):数码管静态/动态显示
156 0
基于FPGA的SNN脉冲神经网络之LIF神经元verilog实现,包含testbench
本项目展示了 LIF(Leaky Integrate-and-Fire)神经元算法的实现与应用,含无水印运行效果预览。基于 Vivado2019.2 开发,完整代码配有中文注释及操作视频。LIF 模型模拟生物神经元特性,通过积分输入信号并判断膜电位是否达阈值产生脉冲,相较于 Hodgkin-Huxley 模型更简化,适合大规模神经网络模拟。核心程序片段示例,助您快速上手。
基于FPGA的2ASK+帧同步系统verilog开发,包含testbench,高斯信道,误码统计,可设置SNR
本内容展示了基于Vivado2019.2的算法仿真效果,包括设置不同信噪比(SNR=8db和20db)下的结果及整体波形。同时,详细介绍了2ASK调制解调技术的原理与实现,即通过改变载波振幅传输二进制信号,并提供数学公式支持。此外,还涉及帧同步理论,用于确定数据帧起始位置。最后,给出了Verilog核心程序代码,实现了2ASK解调与帧同步功能,结合DDS模块生成载波信号,完成信号处理流程。
88 0
基于LSB最低有效位的音频水印嵌入提取算法FPGA实现,包含testbench和MATLAB对比
本项目展示了一种基于FPGA的音频水印算法,采用LSB(最低有效位)技术实现版权保护与数据追踪功能。使用Vivado2019.2和Matlab2022a开发,完整代码含中文注释及操作视频。算法通过修改音频采样点的最低有效位嵌入水印,人耳难以察觉变化。然而,面对滤波或压缩等攻击时,水印提取可能受影响。该项目运行效果无水印干扰,适合实时应用场景,核心逻辑简单高效,时间复杂度低。

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问