学习
实践
活动
工具
TVP
写文章

大话Verilog-Verilog入门(六)

这里默认大家有了基本编程基础了,不然很多很基础的语法要聊,这就变成了写书了。

在《大话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

可以抽象成上面那样,他就是一个异或块功能。

然后把总体功能给梳理清楚后,再回来实现细节。

这个也是很多编程的一个思想,设计者(或则在拿到项目的一开始)你是不需要思考具体到点的实现的,你要懂得把握总体功能,然后分拆给各个小组,或则拆分各个模块。然后在模块实现后,再回来统筹整体。

· 觉得对你有帮助,打赏鼓励下笔者 ·

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180804G0MA1400?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注腾讯云开发者

领取腾讯云代金券