这里默认大家有了基本编程基础了,不然很多很基础的语法要聊,这就变成了写书了。
在《大话Verilog-Verilog入门(五)》我们聊到了顺序块和并行块。
那么这里就接着聊聊块的一些东西。
1
块语句「是怎么生成的」
首先是生成块语句。像之前聊的模块抬头一样,生成块语句也有自己的抬头。
Generate
各种生成语句;
Endgenerate
在Verilog中生成块语句的途径有3种。
分别是:
1、 循环生成
或则用always语句也可以(always在前面也说过,在该语句中不断的执行)
这里还是回归上面的截图来聊聊这儿事吧。
这里首先用了生成快语句的抬头generate和endgenerate,中间的生成语句用了一个for循环,一共循环了N次。
其中一条语句用到的xor,其格式为:xor (output,input,...)
因此我们知道out[j]=i0[j]^i1[j](^:这个符号为异或符号,下面有个附表为真值表)
这条语句生成了N个out[j],从0至N-1。
附表5 异或门真值表
2、 条件生成
3、 Case生成
因为3钟实现方法均是一种手段,至于用哪一种看诸君哪个用的比较顺手吧了。在上面也只分析了第一种实现方法,下面两种是同理的东西,因此不加于叨唠。
由上面的三种方法可以看出,当需要对矢量的多个位进行重复操作、模块实力的重复引用,或则多个定义的时候,生成块语句,可以用简短的代码来实现这些功能。
好看过了上面的可以干了下面这瓶82年的拉飞了
喝完我们可以接着醉谈思考
2
来点「小思考」
其实我们可以换一种角度来看待块语句的,你想想一下,一个产品功能的实现,Verilog是需要很长很长的代码去实现的(相对的呀,你说跑马灯可能就1段话就实现了,但是跑马灯加上交通判断语句这就长了不少了)。
因此在设计的时候,我们往往会分解总体功能,然后分部分实现分解后的功能。
块语句其实也拥有这一种思想在里面,你把整个块语句给合并了,不要想他里面具体怎么实现的,例如上面的第一种实现方法,
Generate
异或语句;
Endgenerate
可以抽象成上面那样,他就是一个异或块功能。
然后把总体功能给梳理清楚后,再回来实现细节。
这个也是很多编程的一个思想,设计者(或则在拿到项目的一开始)你是不需要思考具体到点的实现的,你要懂得把握总体功能,然后分拆给各个小组,或则拆分各个模块。然后在模块实现后,再回来统筹整体。
· 觉得对你有帮助,打赏鼓励下笔者 ·
领取专属 10元无门槛券
私享最新 技术干货