P1的一点小tip

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/sunzepeng_szp/article/details/102691612

ALU:
1.首先,逻辑左移与逻辑左移效果相同,都在后面补0
而逻辑右移不考虑符号位,右移一位,左边补零即可。
算术右移需要考虑符号位,右移一位,若符号位为 1 ,在左边补 1 ;否则,补 0 。
例如,8 位二进制数 10111101 分别右移2位。
逻辑右移结果为00101111
算术右移结果为11101111

2.逻辑右移符号: A >> B
算术右移符号:A >>>B

3.若带符号,$signed(A)

EXT: 用法同上 ext = ext<<2;

gray:
阻塞赋值与非阻塞赋值

string 有限状态机

一、复位模式
异步复位:
在logisim中,异步复位意味着复位信号直接与寄存器相连接。故在verilog当中,当遇到异步复位信号从0变为1(也即该信号上升沿)时,应当将状态复位。具体实现如下:
在这里插入图片描述
其中clr为异步复位信号,s0为复位状态

同步复位:
同步复位意味这我们需要等待时钟上升沿才能进行复位信号的判断,故always语句内应当只有时钟信号。具体实现如下:
在这里插入图片描述
其中reset为同步复位信号,s0为复位状态。

二、状态机模式

Moore型

状态机的类型是由输出是否与当前输入有关决定的。在moore类型中,输出只与当前状态有关,故always块后输出逻辑的判断条件应只有当前状态。下图为一个例子,其中state为当前状态寄存器,A为某一个状态,out为输出。
在这里插入图片描述
Mealy型
若是mealy型状态机,输出与当前状态以及输入有关,故always块后输出逻辑的判断条件应与当前状态和当前输入有关。下图为一个例子。其中state为当前状态寄存器,s0,s1为某一个状态,in为输入,z为输出。

!在这里插入图片描述在这里插入图片描述3. 阻塞式赋值=和非阻塞式赋值<=
这两个概念之前就已经提到过,在此先简要提一下这两种赋值方式的特点:
非阻塞赋值方式(如b<=a):
1.在语句块中,上面语句所赋的变量值不能立即就为下面的语句所用;
2.当前仿真时刻结束后才能完成这次赋值操作,而所赋的变量值是上一次赋值得到的;
3.在编写可综合的时序逻辑模块时,这是最常用的赋值方法。

阻塞赋值方式(如b=a):
1.b的值在赋值语句执行完后立刻就改变的;
2.在时序逻辑中使用时,可能会产生意想不到的结果;
3.赋值语句执行完后,块才结束;

    简单地说,阻塞式赋值是C语言中常见的方式,计算出表达式右边的值并赋给左边,然后执行下一条语句。而非阻塞式赋值在计算出右边的值后并不是立即赋给左边,而是先执行后面的语句,等到当前仿真时刻结束(即除了非阻塞赋值语句外的其他语句都执行完毕)后才将刚才计算出的值赋给左边。

猜你喜欢

转载自blog.csdn.net/sunzepeng_szp/article/details/102691612
今日推荐