Verilog语法

一般在程序中,正确自上而下的内容分别是哪些,以一个同步置数、异步清零寄存器为例子
module block(out,data,load,rst,clock); // out,data,load,rst,clock称作端口列表,block称为端口名称
output[7:0] out;
intput[7:0] data;
input load,clk,rst;
//这三句是模块端口定义,定义端口列表中的哪些变量是输入(input)、输出(output)和双向端口 (inout)以及位宽(这 里,load,clk,rst没有说明具体位宽,但是端口列表的每一个变量都进行了定义)
reg[7:0] out; //模块数据类型说明,这里被赋值信号定义为“reg”类型,感觉很多都是把out重新定义一下

always@(posedge clk)
begin
if(!rst) out=8’h00;
else if(load) out=data;
else out=out+1;
end //always语句是模块逻辑功能描述语句中的一种过程语句,还有inital过程语句、过程赋值语句等
endmodule
![请添加图片描述](https://img-blog.csdnimg.cn/698d0f06ea944b93a9f26a3c9eac15d7.png
在这里插入图片描述

2.1 过程语句
inital
always@<敏感事件列表>
VHDL要求在过程语句(inital和always)中,被赋值信号必须定义为“reg”类型

2.2 语句块
1、串行语句块**(一般都用这个)**
begin

end
2、并行语句块(同时执行)
fork

join

2.3 过程赋值语句
用在always和inital语句中,只能对寄存器数据类型(reg)的变量赋值,对于多位宽的寄存器,可以对其中某一位或几位赋值
1、阻塞赋值语句“=”
在串行语句块中,按顺序执行;在并行语句块中,同时执行
变量=表达式;
b=a; (b必须是reg型)
2、非阻塞赋值语句“<=”
在串行、并行语句块中,都同时执行,需要注意的是,非阻塞与阻塞的执行顺序不一样;
变量<=表达式;
b<=a; (b必须是reg型)
执行阻塞赋值语句的顺序是,先计算等号右端表达式的值,然后立刻将计算的值赋给左边的变量,与仿真时间无关
执行非阻塞赋值语句的顺序是,先计算右端表达式的值,然后等待延迟时间的结束再将计算的值赋给左边的变量

2.4 过程连续赋值语句(assign赋值、deassign重新赋值),不能对寄存器类型变量进行位操作
用在always和inital语句中
assign只能对寄存器(reg)型变量进行赋值、不能对连线型变量进行赋值 //注意这与数据流建模中的“连续赋值语句”刚好相反***
assign<寄存器变量类型> = <赋值表达式>;
deassign语句是一条撤销过程连续赋值的语句
deassign<寄存器变量类型>;

2.5 (强制force、release释放)语句
用在always和inital语句中
可以对连线型和寄存器型变量进行赋值操作,force语句的优先级高于assign
force<寄存器或连线型变量类型> = <赋值表达式>;
assign<寄存器或连线型变量类型>;
release<寄存器或连线型变量类型>;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值