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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 14571|回复: 22

[求助] 求教,verilog里面能在if语句中使用assign吗

[复制链接]
发表于 2011-9-29 09:47:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
一段逻辑这样写编译不过:
if(xxx)
assign aa = bb;
else
assign aa = cc

如果写成
assign aa = (xxx) ? bb : cc
就能编译过。
发表于 2011-9-29 10:02:29 | 显示全部楼层
assign 用于连续赋值语句,if-else用于RTL级描述中,被赋值的变量都是reg类型。
reg类型赋值分blocked和nonblocked,即=和<=,不需要再使用assign
 楼主| 发表于 2011-9-29 10:07:07 | 显示全部楼层
回复 2# IC狂人


    谢谢,不过我程序里的aa是wire型的,需要用assign来赋值,就像这样的逻辑只能用()?xx:yy这种形式吗,如果逻辑复杂这种形式的代码可读性很差,还是if else代码比较清晰。
发表于 2011-9-29 10:26:34 | 显示全部楼层
if... else...不能用在程序块外八,要用在initial 或者always里面
 楼主| 发表于 2011-9-29 10:32:34 | 显示全部楼层
回复 4# rice973


    那么实现我的程序只能有(xx) ? bb : cc 吗?
发表于 2011-9-29 10:45:08 | 显示全部楼层
这。。。。always里面定义成reg型,assign定义wire型。。。
发表于 2011-9-29 11:18:11 | 显示全部楼层
verilog 中可综合的只有always 和 assign两种语句,if。。。else只能用在always语句块里面,
发表于 2011-9-29 13:45:46 | 显示全部楼层
要想用if-else,得这样:
reg aa;
always @(*)
  if(xxx)
    aa = bb;
  else
    aa = cc;
综合的电路都一样。
发表于 2011-9-29 13:48:50 | 显示全部楼层
试过,不行,建议楼主自己也试一试
 楼主| 发表于 2011-9-29 13:56:04 | 显示全部楼层
谢谢大家了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

×

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

GMT+8, 2024-5-18 12:50 , Processed in 0.028106 second(s), 9 queries , Gzip On, Redis On.

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