FPGA的一些规范以及该注意的问题

时间:2025-05-01  作者:Diven  阅读:0

0.模块级的注释

FPGA的一些规范以及该注意的问题

每个模块开始要注明文件名、功能描述、引用模块、设计者、设计时间及版权信息等。

1.宏(Macros)

1、可以把所有的`define放在一个文件中,在编译原代码时首先把这个文件读入

2、如果希望宏的作用域仅在一个模块中有效,就用parameter,==可以用来传递参数==。

3、作用域仅在一个模块中有效,localparam,==不可用来传递参数==。

4、parameter在本Module内有效的定义,可用于参数传递;

从上层传值进下一层常数时,需要在上层用#定义传的值

在下层需要定义对应的参数名字parameter parameter_name;

module_name

#(

.parameter_name(para_value),

.parameter_name(para_value)

inst_name

port map

);

2.FSM

1、verilog描述状态机时必须由parameter分配,而VHDL状态机状态可以在综合时分配产生。

2、组合逻辑和时序逻辑分开用不同的进程

3、状态机主要分为==Mealy==机和==Moore==机,Mealy机的状态和输入有关,而Moore机的状态转换和输入无关。

3.输入不确定的组合逻辑电路

在设计组合逻辑时,需要将不确定的输入转化成确定的输入,然后再完成组合逻辑。

module x2one(in, out);

input in;

output out;

assign out = (in == 1)? 1:0;

endmodule

4.Verilog 中文件输出输出函数的使用方法

1、系统函数$fopen用于打开一个文件,并返回一个整数的文件指针

2、系统函数$fdisplay就可以用这个文件指针在文件中实现写入信息。

3、写完后用$fclose函数关闭文件

==以下语句将”a”和”b”分别显示在”@%h%h”中的两个%h,并写入指针所指的文件W_file.txt==

integer W_file; //定义文件指针

W_file = $fopen(“W_file.txt”);

$fdisplay(W_file, “@%h%h”,a,b);

$fclose(W_file);

4、读文件操作通过readmemh和readmemb函数来完成,分别对应的数据文件为十六进制和二进制

reg[15:0]c[0:15];

$readmemh(“R_file.txt”, c);

5.Verilog 中预处理

verilog预处理与C很类似,预处理符号`开头。

==注:在引用已定义的宏名时,必须在宏名前加`。==

`include file.v  //包含文件file.v

`define  X 1    //定义宏x 值为1

`ifdef X

z = 1;

`else

z = 0;

`endif

6. tri和wire的用法区别

连线与三态线(tri)网语法和语义一致。

tri是用来强调三态门的使用,三态门值 0 1 X Z。

三态线可以用于描述多个驱动源驱动同一根线的线网类型;并且没有其特殊的意义。

7. pullup和 pulldown的用法

如果两个INOUT都处于高阻态,那么接收到的信号到底是什么状态呢?这实际上等效为两个INPUT端口连接,也就等效为INPUT端口悬空。

这应该是取决于外围的驱动,添加的上拉或者下拉电阻,一般而言,FPGA添加的是上拉电阻,也就意味着此时chipscope采集的数据是高电平。

FPGA管脚内部可以配置弱上拉或下拉电阻来实现Z状态下的控制。

在verilog代码中直接可以定义信号线的==上拉==或者==下拉==模式

或者在约束文件中也可以也可以通过约束文件中配置信号线的上拉或者下拉模式

具体用法:

pullup p1 ( );

8. 下面代码中的wire和assign用法有什么区别

paramenter addr =4‘h0;

input [13:0] aaa;

wire ccc=aaa[13:10]==addr;

------------------------------------------

assign bbb=(aaa==16’d0);

从用法来说是一样的,assign是线的赋值语句,普通的io口也可以直接赋值,其实io口在电路上就是wire。

reg 与 寄存器实际上应该反过来讲:

- 如果要综合寄存器,需要同时满足俩个条件:

定义为reg,

在always @posedge(negedge) block中赋值

- 如果要综合组合逻辑,可以(任意):

定义为wire, 用assign赋值

定义为reg, 只在always @(a b c d) block中赋值

在verilog语言中的reg类型只是语法意义上。reg类型的变量不能通过assign赋值,而wire类型的变量不能在always block中赋值。

9. verilog中generater语句的使用,以及genvar用法

在Verilog-2001里,新增加的generate语句拓展了这种用法(其思想来源于VHDL

语言)。除了允许复制产生primitive和module的多个实例化,同时也可以复制产生多个net、reg、parameter、assign、always、initial、task、function。

generate语句有generate-for、genreate-if和generate-case三种语句

generate-for语句必须用genvar关键字定义for的索引变量。

module gray2bin2 (bin, gray);

prameter SIZE = 8;

ouput [SIZE-1:0] bin;

input [SIZE-1:0] gray;

reg [SIZE-1:0] bin;

genvar i;

generate

for(i=0; i 《 SIZE; i=i+1)

begin: bit

assign bin[i] = ^gray[SIZE-1:i]

end

endgenerate

endmodule

9. verilog中 {}和{{}}的区别。

{}表示拼接,{第一位,第二位,…}

{{}}表示复制,{4{a}}等同于{a,a,a,a}

10. IBUFDS、IBUFGDS和OBUFDS差分信号缓冲

IBUFDS、IBUFGDS和OBUFDS都是差分信号缓冲器,用于不同电平接口之间的缓冲和转换。

IBUFDS是差分输入的时候用;

OBUFDS是差分输出的时候用;

IBUFGDS则是时钟信号专用的输入缓冲器

具体见笔记中《==FPGA差分信号缓冲的转换(IBUFDS、IBUFGDS和OBUFDS)==》

11. 时钟配置中MMCM 与PLL的不同点

MMCM 混合时钟管理单元也是由pll构成,只是增加了一些额外性能, 比如给定输入时钟中的频率约束输出时钟频率相位的关系,生成不同的时钟,其实内部也是pll去经过VCO环路锁定输出的。可以理解为MMCM比PLL更高级复杂一些的时钟管理单元。

猜您喜欢

馈通电容滤波器是重要的电气组件,应用于多个领域。在电力电子设备中,用于平滑电流波动,提高电源的稳定性,确保设备的正常运行。在音频设备中,馈通电容滤波器能有效去除...
2019-08-05 00:00:00

贴片电阻R003,指的是封装尺寸为0201的贴片电阻,其长宽仅为0.6mm x 0.3mm,是目前市场上最小的贴片电阻之一。别看它身材迷你,却在电子电路中扮演着...
2024-11-26 11:29:44

贴片电阻的型号通常印在表面,由数字和字母组成。三位数字表示阻值,例如「102」代表1010^2=1000Ω,即1kΩ。「221」代表2210^1=220Ω。「4...
2024-11-26 11:29:40

内六角花形低圆柱头螺钉是应用于机械、电子和建筑行业的重要紧固件,其主要优势体现在以下几个方面:内六角设计使得螺钉的安装和拆卸更加便捷。通过专用的内六角扳手,可以...
2014-05-11 00:00:00

开孔器套装是各种装修和DIY项目中不可少的工具,主要用于在不同材料上打孔。根据用途和设计,开孔器套装可以分为以下几类:首先是木工开孔器,专为木材设计,常用于家具...
2023-03-23 00:00:00

简介大多数存储器接口都是源同步接口,从外部存储器器件传出的数据和时钟/ 选通脉冲是边沿对齐的。在 Virtex-4 器件采集这一数据,需要延迟时钟/ 选通脉冲...
2020-04-11 09:55:00

贴片电阻1206,这个名称在电子领域经常出现,但它究竟是多大呢? 「1206」并非随意数字,它实际代表了电阻的尺寸,单位是英制。1206表示该电阻的长度为0.1...
2024-11-26 11:30:05

VQFN11_2.5X2MM是一种常见的表面贴装封装,广泛应用于电子产品中,尤其是在空间受限的设备中。由于其小巧的尺寸和卓越的性能,VQFN封装在现代电子设计中...
2025-02-24 14:16:10

贴片电阻100Ω表示该电阻的阻值大小为100欧姆。欧姆 (Ω) 是电阻的单位,用于衡量电阻器对电流的阻碍作用。阻值越大,对电流的阻碍作用就越大。电子电路中,电阻...
2024-11-29 10:26:25

贴片电阻3304表示的是阻值为330千欧姆的电阻,封装尺寸为0402。其中,3304的前三位数字330代表阻值,单位是千欧姆。最后的数字4代表封装尺寸代码,对应...
2024-11-29 10:26:13