当前位置:   article > 正文

FPGA学习笔记(一) 基本名词解释及代码规范_fpgatck

fpgatck

声明:本文代码基于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个引脚。

  • TCK(Test Clock Input):TCK为TAP(test access port)的操作提供了一个独立的、基本的时钟信号,TAP的所有操作都是通过这个时钟信号来驱动的。
  • TMS(Test Mode Selection Input):TMS信号在TCK的上升沿有效。TMS信号用来控制TAP状态机的转换。通过TMS信号,可以控制TAP在不同的状态间相互转换。
  • TDI/O(Test Data Input/Output): 数据输入/输出的接口。所有要从特定的寄存器中输入/输出的数据都是通过TDI/O接口一位一位串行输出的(由TCK驱动)。

#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进行转换。

Verilog HDL 编写规范:

这部分在《FPGA设计技巧与案例开发详解》中写得已经很明白了,但有些地方的注释,对于完全新手来说,还不太够。因此,我在此将示例代码重写一遍,补上对像我一样的小白可能有所帮助的注释,顺便让自己更熟悉Verilog编程语言。

module列表:

`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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

always模块:

在看代码前,先了解一下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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

module的例化

//---------------------------------------------------------
//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)		//注意,信号之间用逗号而不是分号隔开
);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

Testbench 文件架构编写规范:

时钟发生器:

//---------------------------------------------------------
//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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

这里是引用

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/煮酒与君饮/article/detail/893206
推荐阅读
相关标签
  

闽ICP备14008679号