Electronics 板


LINE

那个"除频器的nonblocking assignment问题"的HDL code在这篇文章的後面。 (以下文章只有count[0]是Verilog bit-select,"[0]"不是citation XD) 然後来对於这个HDL的Scheduling分析如下。 首先module t有三个always,我们由上而下命名always0, always1, always2。 always0, always1对posedge clock敏感,always2对posedge count[0]敏感。 当一posedge clock出现时,always0, always1会产生evaluation events (这是属於process的evaluation event,assignment也有evaluation event)[1], 也就是要计算它们的sequential blocks。这两个evaluation events,执行顺序 以SystemVerilog标准而言是任意的(arbitrary)。 但今天不管always0的"count <= count+1;",还是always1的"a <= i;"先执行, count与a都不会立即update,因为它们是NBA。 等到进入NBA events region时(严格讲是NBA events region所有events都active, 被放到active events region执行[2]), 如果count先更新,它的更新会产生posedge count[0], 就会使得always2产生evaluation event。 但一个问题来了这evaluation event究竟会被放到哪个region, IEEE 1800-2009没有讲清。 依我用排除法: inactive events region放#0 statements,所以不合。 NBA events region放NBA updates,所以不合。 所以最适合的地方就是active events region。 那现在active events region有: "a <= i;" NBA update, always2 evaluation events。 又active events region有nondeterminism特性, 所以理论上谁先执行都是符合IEEE 1800-2009的标准,所以有race condition! 但实际上我用NC-Verilog, ModelSim, VCS都得到b会抓a新值(edge之後)。 所以我之前说"b讯号都应该会抓a的新值"严格来讲不太正确, 这可能只是实际simulators是如此作,但理论、标准上没有这麽说。 从上面所见NBA的特性我们可以得知,若是多个always都由同一clock edge触发且 使用NBA,那麽应该不会有race condition的问题。 但跨clock domain,如always1与always2,理论上会有race的问题。 虽然跨clock domain的RTL simulation虽然会得到与实际电路 timing不同的结果,但实际拿去作synthesis、修hold time, 就会得到一般数位电路的行为,也就是变成"b会去抓a旧值", 这也是horsehead大所提到的问题。 这也是RTL and synthesis mismatch的问题。 这问题最好用"q <= #1 d;"就可以解决mismatch问题。 目前看来"q <= #1 d;"并没有很严重的缺点, 又可以解决跨clock domain的RTL simulation问题, 它应该是比"q <= d;"更好的coding style。 至於ViewMoon大说曾经遇过同一clock group,不加#1, 不同simulator会有不同结果,不知可否提供范例让大家研究是怎样的情形。 [1] IEEE, "IEEE 1800-2009," p.p. 23, Dec 2009. ※ 引述《zxvc (众生都是未来佛)》之铭言: : 标题: Re: [心得] Verilog使用nonblocking assignment解ꠠ… : 时间: Tue Aug 24 21:41:32 2010 : : [恕删] : : : 推 ViewMoon:sunburst 上的 paper 是好物,在我初学时获益良多深受启发 08/24 20:48 : : → ViewMoon:q <= d 最好写成 q <= #1 d; 一是为了 waveform 易 check 08/24 20:50 : : → ViewMoon:另外它也反映 gate level simulation 时, clock edge 的 08/24 20:51 : : → ViewMoon:相位超前 q transition point 的事实 08/24 20:52 : : → ViewMoon:还有一个原因是, 我遇过加或不加 #1, 导致 simulation 08/24 20:53 : : → ViewMoon:result 不同, 原因可能是 dff0/dff1 clock 不同, 但这两 08/24 20:55 : : → ViewMoon:个 clock 是同一 clock group, 加 #1 比较不会遇到 08/24 20:56 : : → ViewMoon:simulator 牌子不同而不同的结果 08/24 20:57 : : ViewMoon大提到的"q <= #1 d;"这个问题我用SystemVerilog Scheduling去 : 推,真的会有race的问题(即使用了NBA)。至於详细推导过程就懒得说了。 : : 一个可能发生这race的问题是"除频器": : ~~~~~~~~~~~t.sv~~~~~~~~~~~~~~~~~~ : module t : ( : input i, : input nreset, : input clock : ); : logic a, b; : logic [0:0] count; : : always_ff@(posedge clock or negedge nreset) begin : if(!nreset) : count <= 0; : else : count <= count+1; : end : : always_ff@(posedge clock or negedge nreset) begin : if(!nreset) : a <= 0; : else : a <= i; : end : : always_ff@(posedge count[0] or negedge nreset) begin : if(!nreset) : b <= 0; : else : b <= a; : end : endmodule : : module tb; : logic i; : logic nreset; : logic clock; : : initial begin : clock = 0; : forever #50 clock = ~clock; : end : : t t1(.*); : : initial begin : nreset = 1; : i = 0; : : #5; : nreset = 0; : : #5; : nreset = 1; : : #30; : i = 1; : : #100; : i = 0; : : #100; : i = 1; : : #100; : $stop; : end : endmodule : ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ : : ModelSim SE 6.6b模拟结果: : http://pic.pimg.tw/zxvc/ccf4322240d5a015cf5b7a8c88ad616d.png?v=1282656775 : : 其中b在250 ps时没有capture到a的0。 : 用"q <= #1 d;"应该可以解决这问题。 : : -- : 信佛的人要知道:佛绝不会说谎。但请把握时光。 : 法灭尽经: : http://www.cbeta.org/result/normal/T12/0396_001.htm : 共勉之。 : : -- :



※ 发信站: 批踢踢实业坊(ptt.cc)
: ◆ From: 140.115.221.79 : → zxvc:抱歉,刚才仔细想想这问题不是非决定性的问题,b应该不管 08/24 22:37 : → zxvc:用什麽simulator(假设符合Verilog标准)都应该会抓a的新值。 08/24 22:38 : → zxvc:理由改天有空再解释,不信的人可以先用各种simulators模拟。 08/24 22:39 : → zxvc:但我并没有否定如"q <= #1 d;可以用来解这除频器问题"。 08/24 22:45 : → horsehead:这应该是因为他是RTL LEVEL 模拟的关系吧 不然正式设计 08/24 23:11 : → horsehead:上应该不可能让信号跟时脉同时转变 08/24 23:13 -- 信佛的人要知道:佛绝不会说谎。但请把握时光。 法灭尽经: http://www.cbeta.org/result/normal/T12/0396_001.htm 共勉之。 --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.115.73.168 ※ 编辑: zxvc 来自: 140.115.73.168 (08/25 11:46)
1F:→ zxvc:补充一点,那些simulators我没原始码,所以我所看到的模拟结 08/25 11:55
2F:→ zxvc:果充其量只是"实验结果",我说"实际上b会抓新值"只是"假说"。 08/25 11:57
3F:→ zxvc:这篇文章最大的意义是"指出跨clock domain"有不确定性,最好 08/25 11:58
4F:→ zxvc:用"q <= #1 d;"解。 08/25 11:58







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:iOS 或 站内搜寻

TOP