在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
12
返回列表 发新帖
楼主: dhyai

[求助] assign 无法赋值

[复制链接]
 楼主| 发表于 2014-8-6 12:53:49 | 显示全部楼层
回复 10# sonson2008


    那个period就是b的周期,因为要从b的一个信号产生它的八相时钟;延时的精度与timescale有关,小数点后会保留几位的。
发表于 2014-8-6 13:23:08 | 显示全部楼层
perid就是b的周期的话肯定不出波形。
assign #(4*(period/4))   a[3]=b;换言之就是assign #period a[3]=b。
这句话的执行机制是:
(1)b发生变化(0->1)触发等待period延迟
(2)period延迟期间,忽略b的一切变化
(3)period延迟到期后,取到期后当时b的值给a[3](因为period就是b的周期,因此b又是0->1的变化沿,取变化前的值,因此a[3]=0)。
(4)(3)发生时刚好又是b的变化沿,回到(1)。
发表于 2014-8-6 16:24:09 | 显示全部楼层
省略了小数点后的值是因为timescale设定的不对
发表于 2014-8-6 17:36:43 | 显示全部楼层
真心不感觉这个也会成为问题,能否把你的模块多贴出来点?包括Period的值。不知道你在什么情况下会用到这种在assign下的delayed blocking assignment。这是不可综合的你肯定知道吧。
发表于 2014-8-6 20:52:09 | 显示全部楼层
检查综合后的网表,看综合出来的电路是什么。
发表于 2014-8-7 13:54:40 | 显示全部楼层
本帖最后由 goswami 于 2014-8-7 14:26 编辑

要用assign 语句 或者always语句,这样产生就好

module tba;
reg clk;

initial begin
  clk = 1'b0;
  forever #2 clk = ~clk;
end

reg b1,b2,b3,b4;
always b1 = #1 clk;
always b2 = #1 b1;
always b3 = #1 b2;
always b4 = #1 b3;

wire c1,c2,c3,c4;
assign #1 c1 = clk;
assign #1 c2 = c1;
assign #1 c3 = c2;
assign #1 c4 = c3;

endmodule

延迟赋值跨波形变化点(这里是半时钟周期),仿真肯定大部分软件都会有问题,我已经在modelsim中测试过,延迟在等号后和语句前结果不同,但都不能达到群延迟效果。
 楼主| 发表于 2014-8-7 18:39:57 | 显示全部楼层
回复 16# goswami


    恩 应该就是你说的这个原因,用了你写的这几句,波形就可以出来了,多谢!!
发表于 2014-8-27 17:04:56 | 显示全部楼层
always @(clk) b1 <= #1 clk;
always @(clk) b2 <= #2 clk;
always @(clk) b3 <= #3 clk;
always @(clk) b4 <= #4 clk;

这样写, 非阻塞赋值, 时延跨几个时钟周期都没问题
发表于 2014-8-27 17:14:20 | 显示全部楼层
用的多了,反而忘了 阻塞赋值与非阻塞赋值的对于仿真软件的含义了, 咳!

阻塞赋值:  仿真软件只在信号状态改变时, 新值更新到 等号前信号内
非阻塞赋值: 用于在特定时间或者事件发生时, "等号后信号"值更新到"被赋值信号"

基础真的很重要!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-5 22:48 , Processed in 0.020817 second(s), 6 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表