verilog 生成语句怎么理解?
本人刚开始看verilog,看到生成块,不明白生成块的作用,它和c语言中有没有类似的可以对照理解的知识?希望大神能给个形象,易懂的解释...
本人刚开始看verilog,看到生成块,不明白生成块的作用,它和c语言中有没有类似的可以对照理解的知识?希望大神能给个形象,易懂的解释
展开
1个回答
展开全部
3种生成语句其实就是for,if和case。这3种语句的用处都非常打。
for可以用在testbench的激励设置中,定义一个integer i,在initial块中就可以用for来定义一个循环激励,只要i满足一定条件,就有一个对应的激励产生。
if是最常用的条件语句。最常用在行为级的代码书写中。
比方说
if(!reset_n) // 异步清零有效
q<=0;
else
q<=d;
case的用处更多了。当你知道你想定义的输出端是什么的时候,就可以用case来生成输出信号。
case最主要的是要有个使能端,根据使能端来确定输出。
如
case( {s1,s0} ) // 4选1mux
2'b00: y=x[0];
2'b01: y=x[1];
2'b10: y=x[2];
2'b11: y=x[3];
default: y=1'bz;
endcase
提醒:
尽量不要用for语句,因为for语句其实是利用计数器完成的,在编译过程中可能没问题,但是综合到实际电路很容易出问题。
使用if语句,不管有没有else的内容,都要写上else,即使后面跟空语句。这样的话综合不容易出问题。
追问
generate endgenerate可以没有吗,一定要把for if case 写在generate endgenerate之间吗?
追答
不可以,verilog是按块进行编译的,每一个块同时进行编译。if else语句等只是生成语句,必须使用在begin end等块语句中。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询