- 1、本文档共6页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
FPGA开发重点与难点分析(丁维浩)
FPGA开发重点与难点分析
丁维浩
一、简介
二、Verilog的重点
三、自下而上的设计思路
四、IP核
五、Design Summary与芯片类型
六、前仿真与后仿真的区别
七、硬件调试的方法
八、实例:Turbo decoder
简介
1.1 FPGA的特点:(Field Programmable Gate Array)(集成上百万门阵列)
1.2 两大公司:Altera(Quartus)与Xilinx(ISE)
睿思下载 13.1 13.2 14.1…含破解License
1.3 综合工具(Synplify/ Synplify Pro/XST)
XST是ISE自带的,对ISE的库元件支持的最好;
其它两项为第三方开发,但综合性能最好。
1.4 仿真工具(ModelSim/ISim)
ModelSim是专业的第三方波形仿真软件;ISim是ISE内嵌的波形仿真工具。
1.5 开发语言:Verilog与VHDL
Verilog:语言灵活,与C语言非常接近,不严谨;
VHDL:严谨,保证综合的效果,但不灵活,语法比Verilog稍复杂。
1.6 开发流程:
①写matlab程序并进行多次仿真通过;②在ISE中建立工程,将matlab code转化为Verilog code;③对顶层文件进行综合,使用综合工具Synthesize-XST,综合的作用有二:检查语法错误,相当于C语言的编译;将verilog code映射为ISE元件库支持的门器件(加法器、乘法器、寄存器、RAM、ROM……)后,进而转化为底层支持的网表文件;④进行波形仿真,写测试激励文件(testbench),然后进行功能仿真(前仿真),通过后进行时序仿真(后仿真)⑤进行翻译(Translate)、映射(Map)、布局布线(PlaceRoute),需要写约束文件(.ucf)对管教进行分配并对时序进行约束;⑥产生可编程文件(.bit或.mcs);⑦连接电路板,下载程序;⑧使用逻辑分析仪观看波形或者使用xilinx自带的在线逻辑分析仪(chipscope)进行在线回读,在PC上观看波形。
重点是前四步
Verilog的重点
2.1 一个文件就是一个模块(module)//后缀名为.v对应.m vhdl的后缀名为.vhd
module 模块名(端口名1,…… ,端口名N);//模块名需要与.v文件名相同
input [N-1:0] 输入端口名1;//定义input output属性的同时还需定义位宽
input [1:0] 输入端口名2;
……
output [N-1:0] 输出端口名1;
output 输出端口名2;
……
按照需要,把一些中间变量和输出变量声明寄存器(reg型)变量,
因为默认为wire型。
写always块进行程序的逻辑运算
always@(posedge clk) //fpga中必须使用时钟触发信号,可以边沿触发,也可以
begin //电平触发,一般都使用边沿触发(posedge或negedge)
…… //按照需要,一个.v文件中可以写多个always块(因为并行处理),但需要注
…… //意的是同一信号不能在两个以上的always块中进行赋值,会造成无法综合
end
endmodule
重点是必须在英文状态下输入,像上面的()以及,和;等等,有些版本的ISE在中文状态下输入会造成ISE软件崩溃!!
2.2 阻塞赋值和非阻塞赋值
阻塞赋值: b=a; // c=b必须等到b=a执行完成后再执行!
c=b; //第一句阻塞第二句的赋值,
非阻塞赋值: b=a; // b=a在执行的同时可同时执行c=b,两者并行执行,
c=b;//第一句不阻塞第二句的赋值,主要用于信号的延时.
注:如果一个时钟内需要使用多个赋值语句,且各赋值语句的信号不相关,建议使用非阻塞赋值,这样可减少毛刺;如果用于信号延时,必须使用非阻塞赋值;如果各赋值语句的信号相关,一般使用阻塞赋值,这样不会造成逻辑错误。
2.3 reg型变量和wire型变量
reg型:寄存器变量,可在always块中多次被赋值,也可在initial块中进行初始化,但不可在assign语句中被持续性赋值,而且会占用片子的寄存器资源;
wire型:线型变量,不可在always块中被赋值,更不可在initial块中进行初始化,但可以在always块中赋值给其它reg型变量,也可在assign语句中被持续性赋值,不占用片子的资源。
注:程序中的输出变量默认状态下都被定义为wire型变量,因为这样不会占资源,如果需要把输出变量定义为reg型变量,需要写语句声明;在写te
文档评论(0)