当前位置:首页 » 编程软件 » xilinx编译器

xilinx编译器

发布时间: 2023-05-10 23:35:36

A. fpgaip核最多

一、背景

FIFO是FPGA项目中使用最多的IP核,一个项目使用几个,甚至是几十个FIFO都是很正常的。通常情况下,每个FIFO的参数,特别是位宽和深度,是不同的。

明德扬(MDY)在2021年承担了多个基于XILINX芯片的研发项目,包括VPX网络透明传输项目(芯片为XC7K325T-2FBG900)、某高端测试仪项目(芯片为XCKU060-FFVA1156)、某网闸设备项目(芯片为XC7Z030-FBG676)等,另外,明德扬自研了基于XC7K325T-2FBG900和基于XC7K410T-2FBG900芯片的核心板,在XILINX研发领域拥有丰富的经验。

这些项目都必须用到FIFO。如果按照通常做法,每种位宽和深度的IP,都要打开FIFO IP核界面、命名(命名不好不好分辨需要的FIFO)、设置参数、生成并编译IP核,工作量可以想象出来是非常多的。更重要的是随之而来的管理问题,如何管理这几十个不同FIFO,如何检查FIFO的设置是否正确,都是一个不小的挑战。

对于我们专门承接项目的团队,绝不可忍受如此重复、枯燥、容易出错的工作。经过精心研究,终于找到了一条实用的方法:使用XILINX的原语--xpm_fifo_async和xpm_fifo_sync。

XILINX原语xpm_fifo_async和xpm_fifo_sync在FPGA中,可以直接例化使用,并且可以参数化FIFO的位宽和深度的。即在设计时,不用生成FIFO IP,直接例化就可以使用了。

二、获得参考代码

打开VIVADO软件,点击上图中的Language Templates,将会弹出Language Templates窗口,如下图。

在Language Templates窗口中,依次点击verilog、Xilinx Parameterized Macros(XPM)、XPM、XPM_FIFO,如上图。可以看到有三种FIFO,分别是异步的XPM FIFO:xpm_fifo_async、AXI总线的FIFO:xpm_fifo_axis和同步的XMP FIFO:xpm_fifo_sync。

选择xpm_fifo_async,右边的Preview窗口,将出现xpm_fifo_async的注释以及参考代码。将此部分代码拷出来,并将注释删除,剩下的是xpm_fifo_async的例化参考。

上图是对xpm_fifo_async的参数例化部分。下面是需要重点关注并经常使用的参数。

Ø FIFO_WRITE_DEPTH:FIFO的写深度,其实就是在这里设置FIFO的深度,注意该值通常是2的N次方,如8、16、32、64等数。

Ø PROG_EMPTY_THRESH:FIFO的快空的水线。当FIFO存储的数据量小于该水线时,FIFO的快空信号将会变高。

Ø PROG_FULL_THRESH:FIFO的快满的水线。当FIFO存储的数据量大于该水线时,FIFO的快满信号将会变高,表示有效。

Ø READ_DATA_WIDTH:读数据的位宽。

Ø WRITE_DATA_WIDTH:将数据的位宽。

Ø RD_DATA_COUNT_WIDHT:读侧数据统计值的位宽。

Ø WR_DATA_COUNT_WIDTH:写侧数据统计值的位宽。

上图是对xpm_fifo_async的接口信号部分。下面是需要重点关注并经常使用的信号。

Ø wr_clk:FIFO的写时钟

Ø rst:FIFO的复位信号,高电平有效。要注意的是,该信号是属于写时钟域的。

Ø wr_en:FIFO的写使能信号。

Ø din:FIFO的写数据

Ø full:写满指示信号,当FIFO写满时,该信号变高。

Ø wr_data_count:FIFO存储数据量指示信号,用来指示当前FIFO已经写入但未读出的数据个数。

Ø rd_clk:FIFO的读时钟。

Ø rd_en:FIFO的读使能。

Ø dout:FIFO读出的数据。

Ø empty:FIFO的空指示信号。当其为1表示FIFO处于空状态,当其为0,表示FIFO内有数据。

三、定义自用的FIFO模块

从第二步可以看出,xpm_fifo_async是可以参数化深度和位宽的。但xpm_fifo_async有很多参数和信号,并且其中有部分是不使用的。为了使用上的方便,可以自定义自用的FIFO模块。

例如,明德扬就定义了一个模块mdyFifoAsy,该信号的接口信号如下图。可以看出,名称更加规范,并且定义常用的信号,如读时钟rd_clk,写时钟wrclk、写使能wrreq等信号。

明德扬还在模块mdyFifoAsy定义了一些常用的参数,分别是FIFO深度参数:DEPT_W;FIFO位宽的参数:DATA_W,还有FIFO快满参数AL_FUL和快空参数AL_EMP,如下图。

接下来,就是在mdyFifoAsy中例化并使用xpm_fifo_async了。如下图,就是对xpm_fifo_async的参数例化。将DEPT_W传给FIFO_WRITE_DEPTH,DATA_W传给READ_DATA_WIDTH等。

下图是对xpm_fifo_async的信号例化。将不用的信号留空,将dout连到q,din连到data,wr_en连到wrreq等。您可以根据自己情况来定制FIFO。

四、应用

定制完自己的FIFO后,就可以直接例化使用了。

上图就是使用了一个位宽为8,深度为256的FIFO。

上图就是使用了一个位宽为18,深度为1024的FIFO。

FIFO是FPGA、芯片设计中,最常用的IP核,在存储控制、算法实现、接口设计中,都少不了FIFO,因此合理并正确使用FIFO的技术就非常有必要了,明德扬录制了FIFO的训练视频,掌握后技术能力将有大提升。

通过上面介绍可知,通过此种方式,再也不用生成FIFO IP核啦,整个工程大小基本上可以减少一大半。

上面举的例子是xpm_fifo_async,同步FIFO:xpm_fifo_sync的使用方法是类似的。

B. HDL输入信号50MHz,需分频输出4Hz,代码及测试文件怎么实现

要实现将50MHz的输入信号分频输出4Hz,可以使用HDL语言(如Verilog或VHDL)编写代码来实现。


下面是一个简单的Verilog代码示例,实现了将50MHz的输入信号分频输出4Hz的功能:

`timescale 1ns / 1ps

mole divider_tb;
reg clk_in;
wire clk_out;
divider uut(.clk_in(clk_in), .clk_out(clk_out));
initial begin
clk_in = 1'b0;
#25000;
clk_in = 1'b1;
#25000;
end
endmole

在这段代码中,divider_tb是测试文件的模块名。在模块中,定义了一个输入信号clk_in和一个输出信号clk_out。然后,使用了一个名为uut的实例化模块,来连接定义的输入信号和输出信号,这个模块的实际类型是前面定义的divider模块。


最后,测试文件中的initial begin和迅吵end块中定义了测试用例。这里的测试用例是让输入信号clk_in先置亩敏侍为0,然后延时25000个时钟周期,再将输入信号置为1,再延时25000个时钟周期。这样,输入信号就可以产生一个50MHz的时钟信号,可以用来测试前面定义的divider模块。


请注意,这仅仅是一个示例代码,实际使用时可能需要根据具体情况进行调整。例如,你可能需要根据实际的分频比例来调整计数器的值,或者根据实拿铅际的测试需要来调整测试用例。


此外,你还需要使用HDL编译器将这些代码编译成可以在FPGA或ASIC上运行的代码。这需要使用特定的编译器,例如Xilinx Vivado或Intel Quartus。

不同的编译器可能有不同的编译选项,你需要根据你使用的编译器的文档来了解如何编译这些代码。
希望这些信息能够帮助你实现你的项目。

C. warning HDL编译器:1007 (xilinx)说是一个X_RAMB18E1.v- element index 47 into mem is out of bound

element index 47 into mem is out of bound
元素序列超氏谈过mem的范围
也就是说该地址超过了mem的山核橡地址范围,比如mem的地址线宽度为5位,那么他的地址范围为0~31,这样逗旁47就超过他的范围了

D. Xilinx Zynq Z-7020这款FPGA是完全使用C语言开发的吗

硬件的最底层都是做饥机器码耐胡握,汇编指令,但是开发者可以使用任何语言开发,最后都会被编译器转换成机昌庆器码。你这个硬件的一般都是用c开发的。

E. Xilinx的XQV300应该用哪个版本的ISE编译软件,急求,XQV300是qpro的军品级器件,比较老,但现在要用

ISE10.1 /9.2 都可以。

F. verilog 关于余除(取模) '%' 的问题

硬件瞎弊语言不是C程序,你写的东西如果要下到FPGA上 是需要可以综合的。
例如你的枝燃12%5,就是无法磨搭族综合的,
不要考验软件

G. labviewFPGA编译

右键单击RT终端的FPGA芯片,选择属性,查看编译器是那种
官网上有下载,搜xilinx即可。
安装好后,就可以使用本地编译服务器了。

H. 我用xilinx ise到Implement的map这一步出现了一下16个错误,求解决办法(字数限制,无办法粘贴所有错误)

用 synplify综合念局就好了闹纳,Xilinx自己的编译器做的太差仔弯让了

I. 什么是FPGA 简单的说一下,不要复制百度百科之类的。

FPGA实现的设计并非如你想象的用基本门电路搭建 而是查表得出的
FPGA确实提供了一些基本的数字器件 但其最主要的功能单元是LUT(Look-up Table, 查找表)

LUT是一种存储盯册资源 用于实现组合逻辑和时序逻辑(LUT+寄存器)
不同厂商、型号的fpga提供不同的LUT 可以通过非易失性flash或者sram或耐则轮者反熔丝技术实现 LUT的单元规模也不同 可能是4输入、6输入、8输入等
举个例子 要实现 ”a与b“ 这个功能 就相当于查找一个表格 其内容为
a=0,b=0时 f=0;
a=0,b=1时 f=0;
a=1,b=0时 f=0;
a=1,b=1时 f=1;
fpga编译器会把a&&b这个描述转换成这个表格 生成数据流文件
进行fpga配置之后 fpga器件上有一个存储单元就存储了这个数据流文件中昌信描述的这个表格
逻辑运行时 a,b就是这个查找表的索引(即这个存储单元的地址)f就是查找结果(存储单元的输出)

你可以在google搜索xilinx what is an fpga
有简明的介绍 和fpga的结构示意图

J. 如何为qt指定编译器arm-xilinx-linux

修改$QTDIR/mkspecs目录下的符号链接default.将其指向linux-g++
$QTDIR是路径,具体要看你把QT装到什么地方和QT本身的版本,一般是/usr/lib[64]/qt4
修改default符号链接的作用是让qmake在生成Makefile的时候将Makefile文件中的编译器变量$CC与$CXX赋值成gcc和g++

热点内容
linux命令全称 发布:2024-05-17 12:07:54 浏览:110
ftpnas区别 发布:2024-05-17 12:06:18 浏览:949
512g存储芯片价格 发布:2024-05-17 12:04:48 浏览:963
脚本运行周期 发布:2024-05-17 11:39:09 浏览:808
阿里云服务器怎么配置发信功能 发布:2024-05-17 11:37:24 浏览:313
编程中的变量 发布:2024-05-17 11:33:06 浏览:777
加密视频怎么解密 发布:2024-05-17 11:02:52 浏览:571
柳工挖机密码多少合适 发布:2024-05-17 11:00:40 浏览:188
android工程叹号 发布:2024-05-17 10:56:21 浏览:481
在苹果手机应用怎么比安卓贵 发布:2024-05-17 10:56:20 浏览:548