问个verilog技巧
想用变量表示数组的一段,这样子赋值比较方便,不过从报错情况来看,
表示数组的一个元素dout的用法是可以的
表示连续的几个就不行,如下面程序的dout
当然,可以很麻烦的一位位赋值
想问问有没有好的技巧可以实现这个功能
示意代码如下:
module tm(clk,din,dout);
input clk;
input din;
output dout;
reg dout;
reg sp;
always@(posedge clk)
if(sp==4)
sp<=0;
else
begin
dout<=din;
sp<=sp+24;
end
endmodule 报错如下:<br>
<br>
ERROR:HDLCompilers:109 - "tm.v" line 36 Most significant bit operand in part-<br>
select of vector reg 'dout' is illegal<br>
ERROR:HDLCompilers:110 - "tm.v" line 36 Least significant bit operand in part<br>
-select of vector reg 'dout' is illegal module tm(clk,din,dout);<br>
<br>
input clk;<br>
input din;<br>
output dout;<br>
<br>
reg dout;<br>
<br>
reg sp;<br>
<br>
always@(posedge clk)<br>
if(sp==4)<br>
sp<=0;<br>
else<br>
begin<br>
// dout<=din;<br>
dout <= (din << sp);<br>
sp<=sp+24;<br>
end<br>
<br>
endmodule 学习一下,哈哈 好像不对 原帖由 touchtony 于 2006-5-19 17:54 发表<br>
想用变量表示数组的一段,这样子赋值比较方便,<br>
不过从报错情况来看,<br>
表示数组的一个元素dout的用法是可以的<br>
表示连续的几个就不行,如下面程序的dout<br>
<br>
当然,可以很麻烦的一位位赋值<br>
<br>
想问问有没有好的技 ... "output dout;<br>
<br>
reg dout;"<br>
<br>
原文中可以这样定义么? 怎么好多人都问这个...<br>
那个是笔误,已经改了<br>
<br>
我想我的意思大家应该明白的吧... 引用数组的某些数据时,里面不能有变量吧 是不是dout<=din;<br>
sp<=sp+24;<br>
的问题[]里有变量;<br>
可以考虑用dout<={dout,dout};<br>
实现位移再赋值<br>
试了能综合,就是不知道是不是可靠 我觉得老实的去写最好<br>
在后面验证的时候就少犯错<br>
也要综合出最有效率的网表