verilog中可以这样写么?
if (A[B]==0) begin
result <= 不支持的结果
end
else begin
result <= 支持的结果
end
A[B]这样使用可以么?可综合嘛?不然就要写成一个很长的case了
有同事说这样综合出来是memory,这种写法和下面的综合有不同嘛:
case(B)
0: if(A[0]==0) .....
......
15: .......
endcase
两种写法没啥本质区别,也不会综合成memory,总之你根本不必care这么小的东西
我个人认为这个不算是小东西吧。起码你要大致了解,最后出来的电路大致是个什么东西,这么复杂的逻辑clock能到多少?另外,这么写,dump出来的波形,能拖信号出来?反正我没这么写过,求科普。
现在寄存器的bit-select已经可以用变量了么?
嗯,我刚试了一下 单bit选择可以,A[(B+1):B]不行
其实我也一直写case出来
唉我才学verilog的时候师兄导师对我说
verilog是硬件描述语言,你想这个逻辑用了哪些cell就按照cell写出来,不要怕代码长
但是现在这套思路似乎过气了
你换种写法就可以了, A[B+:2],我经常这么干
这个例子来说,我觉得用这种高级特性很好,写case费时间不说,还有可能出bug。
这是高级特性带来的提高生产力。
就像原来的年老工程师喜欢用管子搭电路,不喜欢用verilog。的确是过气的行为了。
那你是在追求极致性能了。我等小兵只有瞻仰的份了
可以。
ninipa (ninipa) 的大作中提到:
: 有一个reg A比如是[15:0]这样,每个比特表示是否支持一个功能,共16个功能,现在有一个[3:0]的变罛传过来,表示当前选用的功能,先判断该功能是否支持,然后再相应的对一个变量result赋值,能不能写成这样?
: if (A[B]==0) begin
: result <= 不支持的结果
: ...................