时间:2024-08-02 来源:网络搜集 关于我们 0
“ 一个多年老硬件攻城狮,开始从0学FPGA......”
小编通过Vivado学习了几个例程,基本把软件环境搞通了,最大的体会是回到Verlilo的学习,只有把Verilog这门语言学会了,才能在实际的开发中得心应手。需求是输入,算法是核心、语言和开发环境是工具,真所谓“巧妇难为无米之炊”。模块是Verilog的基本单元,Verilog的模块对应的是一个电路模块,一个电路模块有输入和输出以及完成的功能,因此,Verilog中的模块包含两部分,一部分是描述接口,包括输入和输出;另一部分是描述的模块的功能,定义由输入得到什么样的输出。01
—
模块端口的定义格式
模块端口的定义格式:module 模块名 (端口1,端口2,端口3,端口4,........);
模块的端口表示的是模块的输入和输出口名,也就是说,它与别的模块联系端口的标识。在引用模块时候其端口可以使用以下两种方式连接:1.在引用时,严格按照模块定义的端口顺序来连接,不用标明原模块定义时规定的端口名;2.在引用时用“.”符号,标明原模块是定义时规定的端口名。02
—
模块内容
模块内容:模块的内容:模块的内容包括I/O说明、内部信号声明和功能定义。I/O说明格式:输人口:input[信号位宽-1:0] 端口名1;
input[信号位宽-1:0] 端口名2;
input[信号位宽-1:0] 端口名i; //(共有i个输入口)
输出口:output[信号位宽-1;0] 端口名1;
output[信号位宽-1:0] 端口名2;
output[信号位宽-1:0] 端口名j; //(共有j个输出口)
输人/输出口:
inout[信号位宽-1:0] 端口名1;
inout[信号位宽-1;0] 端口名2;
inout[信号位宽-1:0] 端口名k; //(共有k个双向总线端口)
I/0说明也可以写在端口声明语句里。其格式如下:module module_name(input port1,input port2……output port1,output port2……);内部信号声明:在模块内用到的和与端口有关的 wire和 reg 类型变量的声明。
wire(或net)用来表示已assign关键字指定的组合逻辑信号,模块的输入输出端口类型默认为wire型,wire型相当于物理连线,默认初始值是高阻态。 reg型表示的是寄存器类型,用于always模块内被赋值的信号,且必须定义为reg型,代表的是触发器,常用于时序逻辑电路,reg相当于存储单元。模块描述时在模块内部对模块的端口进行描述,是从内部角度出发的,因此将input端口看作是外界引申进来的的一条线,只能为wire变量,同理inout有输入和输出,也应该看作wire变量,而output端口被看模块的输出,即可以直接输出(如组合逻辑),也可以寄存后输出(如时序逻辑)。因此output的端口可设置为wire或者reg型变量。模块被调用时是上级模块中对下级模块的例化,描述了其采用了何种信号与芯片(即底层模块)连接,进行驱动或者得到输出。此时是从外部角度出发,上级模块对下级模块的输入可以是组合和时序输入,因此iput可以定义为wire或者reg型变量,而output是上级模块对下级模块的被动接收,是下级模块的一根输出线,因此output只能定义为wire型变量,同理,inout端口也只能是wire型变量。模块的功能定义: 模块中最重要的部分是逻辑功能定义部分。有以下3种方法可在模块中产生逻辑。(1)用“assign”声明语句 如:assign a=b&c;这种方法的句法很简单,只须写一个“assign”,后面再加一个方程式即可。例中的方程式描述了一个有两个输人的与门。
(2)用实例元件如:and #2 u1( q,a,b); 采用实例元件的方法像在电路图输入方式下调入库元件一样,键人元件的名字和相连的引脚即可。这表示在设计中用到一个跟与门(and)一样的名为 u1的与门,其输入端为a、b,输出为 q,也就是输出在前,输输入在后。输出延迟为2个单位时间。要求每个实例元件的名字必须是唯一的,以避免与其他调用与门(and)的实例混淆。(3)用“always”块如:always @(posedge clk or posedge clr);beginif(clr) q<=0;else if(en) q<=d;end 采用“assign”语句是描述组合逻辑最常用的方法之一。而“always”块既可用于描述组合逻辑,也可描述时序逻辑。03
—
模块示例分析
如下定义了一个求out=a&b&c&d的模块:
////////////////////////////////////////////////
module
and_out(a,b,c,d,out);
input wirea; //声明wire型输入端口a
input wire b; //声明wire型输入端口binput wire c; //声明wire型输入端口c
input wire d; //声明wire型输入端口d
output wire out; //声明wire型输出端口out assign out=a&b&c&
d; //使用赋值语句组成实现逻辑功能
endmodule////////////////////////////////////////////////
对应的电路模块如下图:
参考书籍:【《Verilog数字系统设计教程》夏宇闻 】
----------------------------------------------------------【高清HDMI 2.0线】推荐淘宝店铺“电子eStore"所卖的这款,多种线材规格可供选择。
【淘宝】https://m.tb.cn/h.gZ7bXRf?tk=rDGhWr2rQ96 MF1643 「绿联hdmi线2.0清线4k视频传输线黄黑头黑色工程HDMI线」点击链接直接打开 或者 淘宝搜索直接打开
----------------------------------------------------------------
----------------------------------------------------------------
关注小编一起学FPGA......