作者horsehead (小孩脸)
看板Electronics
标题[问题] Verilog Code 多重assign 语法问题
时间Tue Jun 22 19:52:24 2021
各位版上的大大好
小弟最近在看原厂提供的一个FPGA的reference design 的RTL code
其中有一组双向IO他的语法大概写成
assign SDA = (条件1) ? 1'b0 : 1'bz ;
assign SDA = (条件2) ? 1'b0 : 1'bz ;
不好意思 小弟比较才疏学浅 在同一模组里对同一根信号进写两个assign statment 居
然可以synthesis成功(有查过资料如果IO是三态可以成功 ,也就是如果我把1'bz改成1或0
逻辑合成是会失败的 ,我自己做实验也是如此)
然而问的问题是 他systehsis成功後他的behavior我看不太出来是什麽 @@ (我自己写的
话我不会写这种很语焉不详的描述句 ,我一定把条件1/2整合在一起只写成一条叙述句)
我自己在想是不是这电路的behavior会是条件1或条件2成立 就输出0 其余输出Z呢 ?
还请版上高手们多多指教
谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 1.164.114.34 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Electronics/M.1624362746.A.12A.html
※ 编辑: horsehead (1.164.114.34 台湾), 06/22/2021 19:53:52
1F:推 b0241091: 会自动合成出tristate buffer,共用bus时会用到,好像是 06/23 06:51
2F:→ b0241091: 这样 06/23 06:51
3F:推 mmonkeyboyy: 是 就是tristate b. 你可能没写完 但bus就是这样 06/23 08:38
4F:→ wildwolf: assign SDA = (条件2) ? 1'b1 : 1'bz ; 06/23 10:44
5F:→ wildwolf: 上面那行如果是这样的话,电路光模拟就会出现 unknown 06/23 10:45
6F:→ duffrose: assign SDA=(条件1 | 条件2) ? 1'b1 : 1'bz; 06/23 10:46
7F:→ duffrose: assign SDA=(条件1 | 条件2) ? 1'b0 : 1'bz; 06/23 10:47
8F:→ duffrose: 上面一行大错了,然後你要想一想为何要1'b0 & 1'bz? 06/23 10:47
9F:推 mmonkeyboyy: 所以我说他没写完 看不出来对错 06/23 10:48
10F:→ mmonkeyboyy: 下次有这种问题的人吼 请把code都贴好贴满 不然跟 06/23 10:49
11F:→ mmonkeyboyy: 隔空抓药是差不多意思的 06/23 10:50
感谢各位大大的回覆 Code 因为是原厂的 有些保密问题 可能不方便放上来 这边要请各
位大大见谅 他原始的code就是一个I2C Master控制器 ,只是他上头有两个小模组同时会
需要取用这个I2C Master ,只是我不知道他为什麽要分两条来写 ,如果是我的话我会整
成一条 ,因为虽然有两块控制逻辑 ,但实体pin只有一根 ,所以我的话不会写成两个
assigm
不过这样讲还是太复杂 我觉得就直接看我自己实验的的简单小code来讨论这个语法的行为吧
https://imgur.com/VCq9GYb
上图就是我的实验程式码 很简单 目前看两条assign叙述 只要我每一条的驱动方式有Z
也就是关掉output buffer 合成就会过,变成三态闸目前 只是这样写我不知道当我
EN1/EN2都为1时 ,实际电路他会输出啥 我是猜他等效成下面啦
assign OT = (EN1) ? 1'b1 :
(EN2) ? 1'b0 : 1'bz ;
想跟大家讨论一下 看有没有其他想法关於这语法最後合成的实际电路会是如何
※ 编辑: horsehead (1.164.114.34 台湾), 06/23/2021 13:27:08
12F:推 mmonkeyboyy: 看你写SDA 再看看z 也猜得到是I2C 啦 XD 06/23 13:50
13F:→ mmonkeyboyy: 最後会变成 OT 输出 EN1 EN2输入 里面就是掺在一起 06/23 13:50
14F:→ mmonkeyboyy: 做撒尿牛丸罗 06/23 13:52
15F:推 mmonkeyboyy: 11/00应该都是同一态 vcs出来应该是中间 @_@~(猜的) 06/23 14:15
16F:推 mmonkeyboyy: 也就是z态 floating 06/23 14:18
17F:推 mmonkeyboyy: 你的写法在某EN = z的情况下应该会不太一样 06/23 14:23