verilog中阻塞赋值和非阻塞赋值的区别
所谓的阻塞赋值”=”就是说, 在这个语句没有执行完之前,后面的语句是不执行的。
Verilog十大基本功0(阻塞赋值与非阻塞赋值)
这里执行的含义是指完成变量值的更新。
非阻塞赋值”<=”是指, 所有的语句可以并发执行,而前面的值是否执行完毕不会影响后面的语句,
换句话说,语句的顺序是无关紧要的。
原则
避免冒险竞争问题
非阻塞赋值
- 时序电路建模
- 锁存器电路建模
- 在同一个always块中建立时序和组合逻辑电路时,用非阻塞赋值。(在同一个always块中不要既用非阻塞赋值又用阻塞赋值。)
阻塞赋值
- 用always块建立组合逻辑模型
verilog中的repeat的用法和例子
语法
repeat(循环次数表达式) begin
语句块;
end
例子
repeat(2) @(posedge clk); 这个表示啥意思???? clk两次上升沿??
答:等待两个时钟的上升沿。
repeat(10) begin……end,是把这十次都执行完再执行下面的代码还是执行一次就执行下面的代码呢
十次都要执行完
EDA设计一般采用自顶向下的模块化设计方法
electronic design automation
数字系统的设计采用自顶向下、由粗到细,逐步分解的设计方法,最顶层电路是指系统的整体要求,最下层是具体的逻辑电路的实现。自顶向下的设计方法将一个复杂的系统逐渐分解成若干功能模块,从而进行设计描述,并且应用EDA软件平台自动完成各功能模块的逻辑综合与优化,门级电路的布局,再下载到硬件中实现设计。
状态机
定义
状态机由状态寄存器和组合逻辑电路构成,能够根据控制信号按照预先设定的状态进行状态转移,是协调相关信号动作、完成特定操作的控制中心。有限状态机简写为FSM(Finite State Machine)
分类
- 第一类,若输出只和状态有关而与输入无关,则称为Moore状态机
- 第二类,输出不仅和状态有关而且和输入有关系,则称为Mealy状态机
verilog逻辑相等==,与逻辑全等===的区别
区别
当进行相等运算时,两个操作数必须逐位相等,期比较结果才为1(真),如果这些位是不定态(X)或高祖态(Z),其相等比较的结果就会是不定值;
而进行逻辑全等运算时,对不定或高阻状态也进行比较,当两个操作数完全一致时,其结果才为1,否则为0
例子
设A= 8’B1101_XX01,B=8’B1101_XX01
则A==B 运算结果为X;
A===B 运算结果为1
if(A==1’bx) …;(即使A等于x,后面语句也不会执行);
而if(A===1’bx)后面语句会执行。
运算符&
已知 a =4’b1010,b=4’b1100,那么&(a & b)=( )
首先(a&b)是按位相与,得(a&b)=4’b1000
再对上述结果按位相与得&(a & b)=1’b0
验证
module testand;
parameter a=4'b1010,b=4'b1100;
initial begin
$monitor("a=%d,b=%d\n",a,b);
#1
$monitor("&(a&b)=%d\n",&(a&b));
#1
$monitor("(a&b)=%d\n",(a&b));
end
endmodule
a=10,b=12 &(a&b)=0 (a&b)= 8
VHDL并行语句与顺序语句的理解
顺序语句是执行完一句再执行下一句,如果有非阻塞就要按照并行处理,再说几个概念:
并行,顺序:
verilog主要的模块之间都是并行执行的,例如各个always之间 如果你在一个always中要对a赋值,而在另一个always中要使用a的值,这时候就要注意了,两者并行的,处理先后不能确定。 你当前处理的a,是这个时钟被赋值的还是上一时钟被赋值的,意义可能完全不同,这就是并行需要考虑的问题。
而在always内部,一般使用了begin…end。这里面的内容都是顺序执行的,比如b=a; c=b,先执行一条,再执行下一条,那就是c=a了 如果里面有两组if/else,就是先执行前一组,再执行后一组。
Verilog中顺序语句的理解
下列语句中,不属于并行语句的是( )
- A.过程语句
- B.assign 语句
- C.case 语句
- D.元件例化语句
C、case语句是只能在过程语句中使用的高级语句,不属于并行语句。