EDA复习之verilog深入

#50 ********和*****=#50 ****的区别:

前者对于的是整条语句 后者是对于计算出结果后延时50单位再赋值

对于非阻塞赋值 一般真正得到的值是语句快结束的赋值语句 因为延时还没过 就经历了很多运算,根本没有改变他的值,只有最后一个才能改变他的值

a<=d ;b<=a;q<=b综合出来是三个 因为是有延时传输的,不能忽略这个传输延时就是三个d触发器

a=d;b=a;q=b综合出来就是一个d触发器

不完整条件语句会经过综合生成锁存器 latch

不完整条件语句经常用在程序调试

优先编码器可以用if esle嵌套来实现优先级

if(enb)d<=q;else d<=4'hz用来描述三态门

双端端口当输入时候,必须先赋值成高阻态 用enb来调整 t=enb?d:4‘hz 不然会发生线与

多个三态门一般用多个always来写 不然在一个always里面写if很容易错

三态门可以用在总线 和分时传输 电平转换等

双向端口一般用在数据传输,双向数据总线的构建

自定义原件:

primitive XOR2(DOUT,X1,X2)
input X1,x2;
output DOUT;
table //X1 X2 : DOUT
        0  0  : 0;
        0  1  : 1;
        1  0  : 1;
        1  1  : 0;
 endtable
endprimitive

调用语句:

XOR2 U1(so,a,b)

其中定义元件时候 列真值表的时候 可以用?来代表不关心

11分频 占空比为50%

module div11

11位加法计数器 cnt

上升沿cnt<11/2时候x_p=1 否则为0
下降沿时候x_n=x_p
然后把x_n和x_p相或 就得到最终波形

7.5分频

module div7p5x

先来一个7.5*2也就是15加法计数器cnt
上升沿时候 cnt<15/4 xp=1 否则为0
下降沿时候 cnt>15/2&&cnt<15/2+15/4 xn=1 否则为0
然后把xp和xn相或

.5是因为两个波形上升沿下降沿错位相或产生的

11分频是因为刚好都错开了 而加了1产生的偶分频

猜你喜欢

转载自blog.csdn.net/weixin_63163242/article/details/128749366