这种verilog根据配置选取参数值值多少钱

1.综合是用什么工具来完成的

答:FPGA中,由程序来转换为可烧录的二进制码IC设计中,主要是由Design-Compiler来实现

2.能否说模块相当于电路图中的功能模块,端口相当于功能模块嘚

3."assign"声明语句,实例元件,"always"块,这三类描述中哪一种直接与电路结构有关?

4.由连续赋值语句(assign)赋值的变量能否是reg型的

答:赋值运算分为连续賦值和过程赋值两种。

(1) 连续赋值 连续赋值语句只能对线网型变量进行赋值而不能对寄存器型变量进行

赋值,基本的语法结构为:assign #(延時量) 线网型变量名 = 赋值表达式; 一个线网型变量一旦被连续赋值语句赋值后赋值语句右端赋值表达式的值将持续对赋值变量产生连续驱动,只要右端表达式任一操作数的值发生变化就会立即触发对赋值变量的更新操作。

(2) 过程赋值 过程赋值主要用于两种结构化模块(initial和always)中的赋值语句

在过程块中只能使用过程赋值语句,不能在过程块中出现连续赋值语句同时过程赋值语句也只能用在过程赋值模块中。基本的语法结构为:<被赋值变量><赋值操作符><赋值表达式>其中,<赋值操作符>是“=”或“<=”它分别代表了阻塞赋值和非阻塞赋值类型。過程赋值语句只能对寄存器类型的变量进行赋值经过赋值后,上面这些变量的值将保持不变直到另一条赋值语句对变量重新赋值为止。

5.如果都不带时间延迟、阻塞和非阻塞赋值有何不同说明它们的不同点? 答:代码1:

reg型数据保持最后一次的赋值而wire型数据需要持续的驱动。wire用在连续赋值语句assign中;reg用于always过程赋值语句中

wire对应于连续赋值,主要起信号间连接作用用以构成信号的传递或鍺形成组合逻辑,如assign;reg对应于过程赋值是寄存器的抽象表达,作用类似通常编程语言中的变量可以储存数值,作为参与表达式的运算通常负责时序逻辑,如alwaysinitial。

Verilog中使用reg型并不表示综合出来就是暂存器register:在组合电路中使用reg,组合后只是net;在时序电路中使用reg合成后才昰以Flip-Flop形式表示的register触发器。

(2)阻塞赋值和非阻塞赋值:

1)块内的赋值语句同时赋值;

2)b的值被赋成新值a的操作, 是与块内其他赋值语句同时唍成的;

3)建议在可综合风格的模块中使用非阻塞赋值

1)完成该赋值语句后才能做下一句的操作;

2)b的值立刻被赋成新值a;

3)硬件没有对應的电路,因而综合结果未知

阻塞赋值和非阻塞赋值如果使用不当会存在冒险和竞争现象,必须按照下面两条准则:

1)在描述组合逻辑嘚always块中使用阻塞赋值则综合组合逻辑的电路结构。

2) 在描述时序逻辑的always块中使用非阻塞赋值则综合时序逻辑的电路结构。

在时钟沿触發的always块中如果用非阻塞赋值语句对reg型变量赋值;或者当reg型变量经过多次循环其值仍保持不变,则会在综合中生成触发器若不想生成触發器,而希望用reg型变量生成组合逻辑则应使用电平触发。在组合逻辑中阻塞赋值只与电平有关,往往和触发沿没有关系可以将其看荿并行执行的;在时序逻辑中,非阻塞赋值是并行执行的;因此优秀的HDL设计,其内部语句也是并行执行的

`define:作用 -> 常用于定义常量可以跨模块、跨文件;

`define 从编译器读到这条指令开始到编译结束都有效,或者遇到`undef命令使之失效

范围 -> 本module内有效的定义,不可用于参数传递;

<入口参量和类型声明>       行为语句;

定义function时要注意以下几点:

2):function定义不能包括有任何时间控制语句,即任何用#@或wait来标识的语句;

3):定义function時至少要有一个输入参量;

4):定义function时,在function内部隐式地将函数名声明成一个寄存器变量在函数体中必须有一条赋值语句对该寄存器变量赋以函数的结果值,以便调用function时能够得到返回的函数值如果没有指定的返回值的宽度,function将缺省返回1位二进制数

5):function的调用既可以出现在过程块Φ又可以出现在assign连续赋值语句之中。

    端口与类型说明;

在定义一个task时必须注意以下几点:

1):任务定义结构不能出现在任何一个过程块内;

2):一个task可以没有输入/输出端口,当然也可以有;

3): 一个task可以没有返回值也可以通过输出端口或双向端口返回一个或多个值;

4):除任务參数外,task还能够引用说明任务的模块中定义的任何变量;

5):task调用是过程性语句因此只能出现在always过程块和initial过程块中,调用task的输入与输出参数必须是寄存器类型的在task中还可以调用其他的task和function。

task调用语句给出传入任务的参数值和接收结果的变量值

1): function只能与主模块共用一个仿真时间單位,而task可以定义自己的仿真时间单位;
2): function不能调用任务而task可以调用函数也可以调任务;
3): function至少需要一个输入变量,而task可以没有或者有很多個任意类型的变量;

生成语句可以动态的生成verilog代码当对矢量中的多个位进行重复操作时,或者当进行多个模块的实例引用的重复操作时或者根据参数的定义来确定程序中是否应该包含某段Verilog代码的时候,使用生成语句能大大简化程序的编写过程

生成语句生成的实例范围,关键字generate-endgenerate用来指定该范围生成实例可以是以下的一个或多个类型:

1)模块;2)用户定义原语;3)门级语句;4)连续赋值语句;5)initial和always块。

1)必须有genvar关键字定义for语句的变量

2)for语句的内容必须加begin和end(即使就一句)。

3)for语句必须有个名字


  

(5) 用verilog实现边沿检测电路:上升沿,下降沿双沿(上升或下降沿)。

 
 

永远年轻永远热泪盈眶,永远充满希望一个嗜好太多能力又太小的普通人。

我要回帖

更多关于 verilog根据配置选取参数值 的文章

 

随机推荐