赞
踩
声明:本文代码基于Crazy_Bingo的FPGA设计技巧与案例开发详解,其余部分结合笔者(大一学生,还未进行专业课的学习)的学习经历,有些用词可能不够恰当,也难免有所谬误。若有谬误之处,还请各位前辈斧正。来者们对本文有疑问的,也欢迎找我交流,我看到都会回复的。
#EDA(Electronic Design Automation):电子设计自动化,在20世纪60年代中期从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来。【摘自百度】
#CPLD(Complex Programmable Logic Device ):复杂可编程逻辑器件,把乘积技术与EEPROM存储工艺综合在一起,内部延时固定,适合实现复杂组合逻辑电路。
#EEPROM(Electrically Erasable Programmable read only memory):带电可擦可编程只读存储器,是一种掉电后数据不丢失的存储芯片。
#JTAG(Joint Test Action Group):联合测试工作组,用于验证设计与测试生产出的印刷电路板功能。主要包括以下4个引脚。
#CMOS(complementary metal oxide semiconductor)sensor:互补金属氧化物半导体传感器。CMOS是电压控制的一种放大器件,是组成CMOS数字集成电路的基本单元。。
#UART(universal asynchronous receiver/transmitter):UART是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输和接收。
#HDMI(high definition multimedia interface):HDMI是一种全数字化视频和声音发送接口,可以发送未压缩的音频及视频信号。
#VGA(video graphics array):VGA接口,即VGA视频图形阵列,是IBM于1987年提出的一个使用模拟信号的电脑显示标准。VGA接口即电脑采用VGA标准输出数据的专用接口。
#MCU(micro controller unit):中文为微控制单元,又称单片微型计算机或者单片机,是指将计算机的CPU、RAM、ROM、定时计数器和多种I/O接口集成在一片芯片上,形成芯片级的计算机。
#SDRAM(synchronous dynamic random access memory):同步动态随机存储器。synchronou,同步,需同步时钟;dynamic,动态,需刷新电容;random,随机,非线性可指定地址。
#sof(SRAM Object File),pof(Programmer ObjectFile),rbf(Raw BinaryFile):Altera公司的Quartus II开发工具可以生成多种配置或编译文件,用于不同配置方式。对于不同的目标器件,编译后开发工具会根据指定的FPGA器件自动生成“.sof(SRAM Object File)”和“.pof(Programmer ObjectFile)”配置文件。“.sof”配置文件是由下载电缆将其下载到FPGA中的;“.pof”配置文件是存放在配置器件里的。用单片机配置时,要将“.sof”文件转换成“.rbf(Raw BinaryFile)”文件,可打开QuartusII的File菜单,单击ConvertProgramming Fiks进行转换。
这部分在《FPGA设计技巧与案例开发详解》中写得已经很明白了,但有些地方的注释,对于完全新手来说,还不太够。因此,我在此将示例代码重写一遍,补上对像我一样的小白可能有所帮助的注释,顺便让自己更熟悉Verilog编程语言。
`timescale 1ns/1ns //time_delay order delay_unit/delay_accuracy
module Verilog_Template
(
//global clock
input clk, //50MHz
input rst_n, //globe reset
//user interface
output[7:0] led_data //board test led
);
endmodule
在看代码前,先了解一下verilog里的常数的表达:
//---------------------------------------------------------
//Generate for 1st delay signal
localparam DELAY_TOP = 28'd50_000000; //1s*5MHz=50_000000,delay 1s
reg[27:0] delay_cnt;
always @(posedge clk or negedge rst_n)
begin
if(!rst_n)
delay_cnt <= 0;
else if(delay_cnt < DELAY_TOP-1'b1)
delay_cnt <= delay_cnt+1'b1;
else
delay_cnt <= 0;
end
//counter for 1s delay is completed
wire delay_1s = (delay_cnt == DELAY_TOP-1'B1)?1'b1:1'b0
//--------------------------------------------------------- //Generate water led display led_input_display #( .LED_WIDTH (8) //带#的是端口内使用的参数 ) u_led_input_display //以命名端口连接方式为例,另有顺序端口连接,不在此介绍 ( //global clock .clk /*原模块端口名*/ (clk), /*例化模块端口名*/ .rst_n (rst_n), //user interface .led_en (1'b1), .led_value (led_value), .led_data (led_data) //注意,信号之间用逗号而不是分号隔开 );
//--------------------------------------------------------- //clock generate module reg clk; reg rst_n; localparam PERIOD = 20; //50MHz,PERIOD*RATE=50MHz*20ns=1MHz*1us,这里假设module中已声明`timescale 1ns/1ns initial begin clk = 0; forever #(PERIOD/2) clk = ~clk; end task task_reset; begin rst_n = 0; repeat(2) @(negedge clk); rst_n = 1; end endtask
这里是引用
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。