求教,verilog里面能在if语句中使用assign吗
if(xxx)
assign aa = bb;
else
assign aa = cc
如果写成
assign aa = (xxx) ? bb : cc
就能编译过。
assign 用于连续赋值语句,if-else用于RTL级描述中,被赋值的变量都是reg类型。
reg类型赋值分blocked和nonblocked,即=和<=,不需要再使用assign
谢谢,不过我程序里的aa是wire型的,需要用assign来赋值,就像这样的逻辑只能用()?xx:yy这种形式吗,如果逻辑复杂这种形式的代码可读性很差,还是if else代码比较清晰。
if... else...不能用在程序块外八,要用在initial 或者always里面
那么实现我的程序只能有(xx) ? bb : cc 吗?
这。always里面定义成reg型,assign定义wire型。
verilog 中可综合的只有always 和 assign两种语句,if。else只能用在always语句块里面,
要想用if-else,得这样:
reg aa;
always @(*)
if(xxx)
aa = bb;
else
aa = cc;
综合的电路都一样。
试过,不行,建议小编自己也试一试
谢谢大家了
要在always块里面
没这样用过。
reg aa;
always @(aa or bb or cc)
if(xxx)
aa = bb;
else
aa = cc;
等价于
wire aa;
assign aa = (xxx) ? bb : cc;
reg aa;
always @(aa or bb or cc)
if(xxx)
aa = bb;
else
aa = cc;
等价于
wire aa;
assign aa = (xxx) ? bb : cc;
不行,这样综合过不了的
同意8楼~虽然定义的是reg型~但综合出来还是组合逻辑
肯定是不行的啊
Verilog里面几个进程是并发执行,不能是包含关系
initial
always
assign
task
这三个必须得单独做为一个进程
reg aa;
always @(*) //// 要写成* 否则易错
if(xxx)
aa = bb;
else
aa = cc;
等价于
wire aa;
assign aa = (xxx) ? bb : cc;
都是组合电路 不会产生寄存器
第一个写法之所以写成 reg aa 是因为语法要求always里面被赋值的必须是reg,综合出来是wire
呃。建议小编先看看Verilog的书
好!
看书先吧
这个是连续性赋值语句啊
