xilinxFPGA-初学FPGA必知【代码含义,模块例化(如同C语言中调用子函数),代码仿真,固化文件(下载并保存文件,掉电不丢失)】(基于 verilog)

本文介绍了FPGA初学者必须了解的三个关键概念:1) 模块实例化,类似于C语言中的函数调用;2) 代码仿真,包括功能仿真和时序仿真,强调了其在FPGA开发中的重要性;3) 代码固化,解释了如何将代码存储在FPGA的Flash中以保持断电后程序的运行状态。通过实例详细解析了Vivado工具的使用方法,包括ILA逻辑分析仪和约束文件的配置。
摘要由CSDN通过智能技术生成

xilinxFPGA-初学FPGA必知【代码含义,模块例化(如同C语言中调用子函数),代码仿真,固化文件(下载并保存文件,掉电不丢失)】(基于 verilog)

代码含义

首先,我们要知道,在 PFGA 中没有函数的含义,在 FPGA 中是以模块的定义,相当于 C 语言中的函数。

//重点强调:代码规范!!!
//规范的代码可以大大的增强可读性!!!!!
·timescale 1ns / 1ps	//时间精度在FPGA中 #20.25; 这种语句叫做延时延时时间就是在这儿规定,时间单位为1ns,精度为1ps,所以可以延时 20.25ns 的时间,如果 1ns / 1ns 那么 #20.25 就是错误的,因为精度只有1ns,所以不能低于精度的延时。

module led(	//模块头部的定义,led为模块名称。
	//在这儿定义模块之中将会使用到的输入输出口。
);
	//模块内部具体实现功能。
endmodule	//模块尾部的定义。

在这儿,就能很清楚的看到一个模块的具体框架了,接下来我们分析输入输出端口。

	input	a,	//定义一个输入口a,默认为reg类型。
	input	b,	//定义一个输出口b。
	//这儿我们定义了两个输出口,每个输出口占1个位宽,一共占两个位宽,所以,我们可以定义为 input [1:0]a,	这样就是定义了一个2位宽的输入口,可以拿一位作为a,拿一位作为b。
	output	reg c,	//定义了一个输出端口,输出端口位1位宽,reg(相当于储存单元)是类型,output默认为wire(相当于物理连线)类型。
	//wire只能在assgin(后面会讲到)连续赋值。
	//reg只能在initial和always(后面会讲到)中赋值。
	output	d	//定义一个输出端口,最后一个端口末尾不需要加逗号。

对于 FPGA 模块中的输入输出口也定义好了,现在我们开始来写具体实现功能代码。

	assign d = (1 > 2) ? a : b;	//在assign语句中,可以对wire变量进行复制,当1>2为真时,输出口d输出输入口a的值,反之输入b的值。
	//assign的功能可以归纳为:(1)持续复制;(2)连线;(3)对wire变量进行赋值。(这儿不做详解,以后会慢慢讲到。)。
	
	//这儿要记住,FPGA里面的这些代码是并行执行的,除了在时序语句里面,其他语句的先后顺序并不影响程序效果。
	initial	begin	//initial模块在整个程序运行中,只执行一次。beginend就相当于C语言的{}。
		a = 0;	//把a立刻赋值为0,当这条语句结束后,立马等于0。
		b = 0;
		#20 a <= 1'b1;	//延时20ns,a赋值1,但是不是立刻赋值,当initial运行完了之后才运行,这条语句过完了之后a还是0,不会立刻赋值。
		//1'b1,在这个语句中第一个1代表数据位宽,'b代表二进制,最后面的是数据大小,这儿是表示二进制的1。
		#20 b <= a;	//延时20ns后将a的值赋值给b,,因为上面a没有立即赋值为1,所以此时b会赋值为a以
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值