wujian100_open的FPGA实现——如何用vivado生成wujian100_open的比特流文件

简介: 本文介绍 如何用vivado生成wujian100_open的比特流文件

上次我们用开源EDA工具iverilog在Linux系统上成功仿真了wujian100_open,那么这次我们将使用Xilinx的FPGA开发工具vivado综合和实现wujian100,并最终生成可以直接下载到FPGA里的比特流文件。

不过这次我们不用Linux系统了,因为我之前已经在Windows系统上安装了Vivado 2018.3,没在Linux上装vivado,vivado这个软件也挺庞大的,下载安装有点儿麻烦,而且我也没在Linux上装别的综合工具(比如官方推荐的Synplify),所以我就直接在Windows系统上用vivado实现吧。

确定工程所用文件

因为官方是用在Linux系统上用Synplify + Vivado生成比特流的,我们要在Windows系统上实现的话,就不能直接用官方的脚本文件啊啥的了,那么我们第一步就是要搞清楚,工程要用到哪些文件。我们打开synplify目录下的“wujian100_open_200t_3b.prj”文件,看看Synplify工程的建立细节。

image.png

image.png

好了,工程所用的源文件我们现在知道了,到时候用vivado创建工程的时候再对照着添进去就行了。注意,添加的时候要仔细看好,不要不要添错了哦,别一股脑地 全选,添加。

这里注意一下“wujian100_open_200t_3b.prj”文件下面的内容。

image.png

红色框框的那里是时序约束文件,“wujian100_open-masterfpgaxdcXC7A200T3B.xdc”这个约束文件只是管脚约束,到时候我们还要把红色框框那个文件里的时序约束内容添到“XC7A200T3B.xdc”里。蓝色框框里的是包含文件,添源文件时别忘记把“soc/param”里的包含文件也添进去。绿色框框里是器件信息,到时候建立工程时选器件要用上。

然后我们来看一下“wujian100_open.sdc”这个约束文件里有什么内容。

image.png

# Clocks
#top
define_clock   {n:PIN_EHS} -name PIN_EHS  -freq 20 -clockgroup clkgroup_2
define_clock   {n:PAD_JTAG_TCLK} -name PAD_JTAG_TCLK  -freq 2 -clockgroup clkgroup_3
define_clock   {n:x_aou_top.x_rtc0_sec_top.x_rtc_aou_top.x_rtc_clk_div.i_rtc_ext_clk} -name I_RTC_EXT_CLK -freq 1 -clockgroup clkgroup_4
define_clock   {n:x_aou_top.x_rtc0_sec_top.x_rtc_aou_top.x_rtc_clk_div.rtc_clk_div} -name RTC_CLK_DIV -freq 0.5 -clockgroup clkgroup_4
#pwm
define_clock   {n:x_pdu_top.x_sub_apb0_top.x_pwm_sec_top.x_pwm.x_pwm_ctrl.clkdiv} -name CLKDIV  -freq 5 -clockgroup clkgroup_2
#

这个约束文件的内容描述了 五个时钟:PIN_EHS、PAD_JTAG_TCLK、I_RTC_EXT_CLK、RTC_CLK_DIV 和 CLKDIV,三个时钟组:clkgroup_2、clkgroup_3 和 clkgroup_4 。

好的,我们把这些约束转化为xdc文件的语法,写入到“XC7A200T3B.xdc”里。向“XC7A200T3B.xdc”中加入以下语句:

create_clock -period 50.00 -name PIN_EHS [get_ports PIN_EHS]
create_clock -period 500.00 -name PAD_JTAG_TCLK [get_ports PAD_JTAG_TCLK]
create_clock -period 1000.00 -name I_RTC_EXT_CLK [get_cells x_aou_top/x_rtc0_sec_top/x_rtc_aou_top/x_rtc_clk_div/i_rtc_ext_clk]
create_clock -period 2000.00 -name RTC_CLK_DIV [get_cells x_aou_top/x_rtc0_sec_top/x_rtc_aou_top/x_rtc_clk_div/rtc_clk_div]
create_clock -period 200.00 -name CLKDIV [get_cells x_pdu_top/x_sub_apb0_top/x_pwm_sec_top/x_pwm/x_pwm_ctrl/clkdiv]

set_clock_groups -name clkgroup_2 -asynchronous -group [get_clocks PIN_EHS] -group [get_clocks CLKDIV]
set_clock_groups -name clkgroup_3 -asynchronous -group [get_clocks PAD_JTAG_TCLK]
set_clock_groups -name clkgroup_4 -asynchronous -group [get_clocks I_RTC_EXT_CLK]  -group [get_clocks RTC_CLK_DIV]

完了之后,再把下面图片中的红色框框中的“_c”给删掉(看了群友的博文,说不然后面会报错,本着不给自己找麻烦的原则,咱也删了嘻嘻……)。然后保存。

image.png

好的我们现在可以打开vivado,建立工程了。

用建立Vivado工程并综合实现

打开vivado,点击左侧的“create project”建立工程。

image.png

选“RTL Project”。image.png

点击“Add Files”添加源文件,选择准备好的源文件。完了之后红框框里的全给勾上。
image.png

点击“Add Files”添加约束文件,选择准备好的约束文件。
image.png

器件选择“XC7A200TFBG484-2L”。
image.png

然后工程创建成功之后会自动打开。工程打开后,在“Sources”窗口中,切换到“Compile Order”,在“Design Sources”下找到“wujian100_open_fpga_top.v”,右键点击它,然后在弹出的菜单中点击“Move to Top”这个选项,调整综合顺序。
image.png

然后我们就可以开始综合实现了。点击“Run Implementation”,进行综合实现。
image.png

image.png

然后,我们等待它完成。

根据综合实现结果更改约束文件重新综合实现

综合实现完成之后,我们看一下结果如何。
image.png

我们看到WHS为负,保持时间不满足。我们双击查看详细的实现报告。

image.png

点击红色框框的数字,查看时序违例的具体路径。

image.png

双击违例路径“Path 31”查看详细情况。

image.png

我们看到时钟路径和数据路径的终点都是同一个元件。我们再右键点击“Path 31”,选择“Schematic”,打开这条路径的电路原理图。

image.png

image.png

再双击器件的时钟端口C(红色框框处),查看器件时钟的连接。

image.png

我们可以看到器件的时钟端口C和数据端口D是连在一起的,导致这一条路径不满足保持时间要求。要把这条“奇怪的路径”设为时序例外,静态时序分析时跳过这条路径。

此外,我们看一下实现后有哪些“warning”。

image.png

有三个时钟无法创建,找不到对应的端口(我之前在实现的时候也有这个报错,我到电路原理图上一层层找,也没有找到对应的cell)。我不太清除是我的语法错误还是其他原因,无法创建这三个时钟,那就只留下主时钟和边界扫描时钟吧,那三个时钟就不创建了。

所以我们修改“XC7A200T3B.xdc”文件,去掉那三个时钟,增加一条伪路径,修改一下时钟组。增加伪路径的语句如下:

set_false_path -from [get_ports PIN_EHS] -to [get_pins x_cpu_top/CPU/x_cr_tcipif_top/x_cr_coretim_top/refclk_ff1_reg/D]

image.png

保存.xdc文件后,点击“Run Implementation”,重新进行综合实现。

又是一番等待之后(论有一台好电脑的重要性!),Implementation终终终于Complete了。我们来看看结果如何。

image.png

image.png

好了,这次成功了。

生成比特流文件

实现成功之后,我们可以生成比特流文件了。

image.png

等待一会儿之后,成功生成比特流文件。

image.png

image.png

把比特流文件下载到FPGA上

有了比特流文件之后呢,就可以连接FPGA开发板,把比特流文件下载到FPGA上,这样,你设计的电路就真正实现在FPGA(硬件)上了,然后你就可以在FPGA上运行、验证你所设计的的电路啦~~

不过我手上没有开发板,这一步就做不了了~

终于肝完了,啥也不懂的小白 + 慢的一匹的电脑 + 又傻又轴的死脑筋 = 肝……不过虽然这样,这次对“约束”特别是“时序约束”有了更深一步的了解,之前对约束尤其是时序约束一窍不通,全靠别人写好的约束续命,碰到时序违例更是不知所措,这次查了很多资料,终于了解了一点点,以后再做东西会比之前好很多。总之,这次收获还是不少的,肝就肝了吧。

最后,一如既往地欢迎大家拍砖哦~~

文章来源:芯片开放社区
文章链接:https://occ.t-head.cn/community/post/detail?spm=a2cl5.14300636.0.0.1b87180flWxVN5&id=654091577878118400

相关文章
|
6月前
|
机器学习/深度学习 算法 异构计算
m基于FPGA的多通道FIR滤波器verilog实现,包含testbench测试文件
本文介绍了使用VIVADO 2019.2仿真的多通道FIR滤波器设计。展示了系统RTL结构图,并简述了FIR滤波器的基本理论,包括单通道和多通道的概念、常见结构及设计方法,如窗函数法、频率采样法、优化算法和机器学习方法。此外,还提供了Verilog核心程序代码,用于实现4通道滤波器模块,包含时钟、复位信号及输入输出接口的定义。
152 7
|
6月前
|
传感器 算法 计算机视觉
基于肤色模型和中值滤波的手部检测算法FPGA实现,包括tb测试文件和MATLAB辅助验证
该内容是关于一个基于肤色模型和中值滤波的手部检测算法的描述,包括算法的运行效果图和所使用的软件版本(matlab2022a, vivado2019.2)。算法分为肤色分割和中值滤波两步,其中肤色模型在YCbCr色彩空间定义,中值滤波用于去除噪声。提供了一段核心程序代码,用于处理图像数据并在FPGA上实现。最终,检测结果输出到"hand.txt"文件。
|
6月前
|
算法 异构计算
m基于FPGA的电子钟verilog实现,可设置闹钟,包含testbench测试文件
该文介绍了基于FPGA的电子钟设计,利用Vivado2019.2平台进行开发并展示测试结果。电子钟设计采用Verilog硬件描述语言,核心包括振荡器、分频器和计数器。时间显示为2个十进制格式,闹钟功能通过存储器和比较器实现,当当前时间等于设定时间时触发。文中给出了Verilog核心程序示例,展示了时钟信号、设置信号及输出的交互。
188 2
|
5月前
|
算法 计算机视觉 异构计算
基于FPGA的图像一维FFT变换IFFT逆变换verilog实现,包含tb测试文件和MATLAB辅助验证
```markdown ## FPGA 仿真与 MATLAB 显示 - 图像处理的 FFT/IFFT FPGA 实现在 Vivado 2019.2 中仿真,结果通过 MATLAB 2022a 展示 - 核心代码片段:`Ddddddddddddddd` - 理论:FPGA 实现的一维 FFT/IFFT,加速数字信号处理,适用于高计算需求的图像应用,如压缩、滤波和识别 ```
|
5月前
|
算法 计算机视觉 异构计算
基于FPGA的图像直方图均衡化处理verilog实现,包含tb测试文件和MATLAB辅助验证
摘要: 在FPGA上实现了图像直方图均衡化算法,通过MATLAB2022a与Vivado2019.2进行仿真和验证。核心程序涉及灰度直方图计算、累积分布及映射变换。算法旨在提升图像全局对比度,尤其适合低对比度图像。FPGA利用可编程增益器和查表技术加速硬件处理,实现像素灰度的均匀重分布,提升视觉效果。![image preview](https://ucc.alicdn.com/pic/developer-ecology/3tnl7rfrqv6tw_a075525027db4afbb9c0529921fd0152.png)
|
6月前
|
算法 计算机视觉 异构计算
基于肤色模型的人脸识别FPGA实现,包含tb测试文件和MATLAB辅助验证
这是一个关于肤色检测算法的摘要:使用MATLAB 2022a和Vivado 2019.2进行测试和仿真,涉及图像预处理、RGB到YCbCr转换、肤色模型(基于阈值或概率)以及人脸检测。核心程序展示了如何读取图像数据并输入到FPGA处理,通过`tops`模块进行中值滤波、颜色空间转换及人脸检测,最终结果输出到"face.txt"。
|
6月前
|
算法 异构计算
基于直方图的图像曝光量分析FPGA实现,包含tb测试文件和MATLAB辅助验证
该内容包括了算法的运行效果展示、软件版本信息、理论概述和核心程序代码。在正常图像中,`checkb`位于`f192b`和`f250b`之间,而多度曝光图像中`checkb`超出此范围,判断为曝光过度。使用的软件为Vivado 2019.2和MATLAB 2022a。理论依据未详细给出,但提及主要方法。提供的Verilog代码段用于处理图像数据,包括读取文件、时钟控制及图像histogram计算等,其中模块`im_hist`似乎是关键部分。
|
6月前
|
算法 TensorFlow 算法框架/工具
基于直方图的图像阈值计算和分割算法FPGA实现,包含tb测试文件和MATLAB辅助验证
这是一个关于图像处理的算法实现摘要,主要包括四部分:展示了四张算法运行的效果图;提到了使用的软件版本为VIVADO 2019.2和matlab 2022a;介绍了算法理论,即基于直方图的图像阈值分割,通过灰度直方图分布选取阈值来区分图像区域;并提供了部分Verilog代码,该代码读取图像数据,进行处理,并输出结果到"result.txt"以供MATLAB显示图像分割效果。
|
6月前
|
算法 计算机视觉 异构计算
基于FPGA的图像累积直方图verilog实现,包含tb测试文件和MATLAB辅助验证
该内容展示了FPGA实现图像累积直方图的算法。使用Vivado2019.2和matlab2022a,通过FPGA的并行处理能力优化图像处理。算法基于像素值累加分布,计算图像中像素值小于等于特定值的像素个数。核心代码为`test_image`模块,读取二进制图像文件并传递给`im_hist`单元,生成直方图和累积直方图。
|
6月前
|
算法 计算机视觉 异构计算
基于直方图相似性的图像分类算法FPGA实现,包括tb测试文件和MATLAB辅助验证
该内容包含了一段关于图像处理算法的摘要,主要包括: 1. 展示了MATLAB和FPGA的测试结果图像,显示了图像读取完成的标志和相似性指标,其中图1与图2有较强相似性,图1与图3相似性较弱。 2. 算法使用的是vivado 2019.2和matlab 2022A版本。 3. 算法原理涉及图像直方图统计和直方图相似性度量,通过计算直方图的差异来衡量图像相似度,FPGA实现包括图像采集、直方图计算、比较和分类决策步骤。 4. 提供了一个部分核心Verilog程序,用于读取图像数据并在FPGA上进行直方图相似性计算。

热门文章

最新文章