Verilog的循环语句

条件语句

这个就和c语言差不多的用法了,首先就是多路选择器的设计方案,通过else if 设计多路条件出发,然后在if-if-else语句中,需要使用begin和end关键字,因为这里好像是没有{的,为了避免歧义。

case语句

这里和c语言不同,case语句的书写规范是

case(对象)
    条件1    :             输出1 ;
    条件2    :             输出2 ;
    ……
    条件3    :             输出3 ;
    不满足   :              输出4;
endcase

当然,如果所有条件都不满足直接输出对应的结果,同理,在case选择语句当中,每个条件都应该是互斥的,(这块网上文档的解释是可以不互斥,但是我觉得既然是并发执行,不是顺序执行,在选择语句当中,有类似的条件触发,会引发至少是异常,大概率是冲突,网上确说是谁在前先执行,这不更并发执行互斥吗)在多条执行语句中,需要加入begin和end,例如:满足条件1,但是需要作两到三个步骤,

然后有个casex和casez语句,没懂,就是去除比较值一样,比如三位数比较最低位,就可以用??代表前两位,然后只比较最后一位。

Verilog的循环语句有四个类型,分别是while,for,repeat和forever。循环语句只能always或initial中使用 while语句的使用方法: while(条件)begin ...... end 循环结束的条件就是不满足条件了 for循环 for(初始条件:终止条件:过程赋值语句) begin .... end (用法和c语言差不多,没有自加和自减用法) repeat循环 repeat(次数)begin ...... end repeat就是固定次数的循环, forever循环 forever循环语句是永远循环,不包含任何条件表达式,一旦执行就无限循环,系统函数finish可以退出 过程赋值语句 第一类过程赋值语句:assign和deassign。赋值对象只能是寄存器或寄存器组。 (没看懂这里给的两个例子) 第二类过程赋值语句:force和release,使用方法和效果和assign类似,但赋值对象可以是reg型变量,或者wire型。 因为是无条件强行赋值,一般多用于交互式调试过程,在使用过程中,force就是赋值,release就是还原以前的值, (代码没看懂,这个对temp的加法赋值在哪) 端口和模块 模块定义 module module_name

endmodele 模块定义必须从module开始,到endmodule结束,模块名,端口信号,端口声明和参数声明都要在正式执行之前,模块内部由五个部分构成,变量声明,数据流语句,行为级语句,底层模块例化及任务和函数,顺序不定,

端口

端口定义跟其他语言差不多,都是交互的接口 端口列表 模块的定义中包含一个可选的端口列表 ,列表中标明可用的端口,端口不带任何参数,其中如果一个模块没有涉及对外部的交互,就不需要写端口列表。 端口声明 端口信号在端口列表中写出后,就可以在模块中进行声明和使用,端口类型有三种:输入,输出和双向端口,其中输出的端口不能是reg数据类型,因为reg类型是用于保存数据数值的,而输入端口只能反映与其相连的外部信号的变化,不能保存这些信号的值。 在端口声明的时候,需要注意隐式声明,因为当端口具有wire属性时,可以不声明,reg不行,也就是简单的说输入可以省略声明,但是输出事必须要的。 声明还可以跟定义一起,output reg okk;

(例子有点看不懂,) 模块例化,一个不熟悉的名词,一个模块引用另一个模块,对其端口进行相关的链接。(我估计就是函数调用类似的)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值