AAT 发表于 2010-6-26 00:54:06

问个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

usd 发表于 2010-6-26 02:53:53

报错如下:<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

longt 发表于 2010-6-26 03:07:06

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>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;if(sp==4)<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; sp&lt;=0;<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;else<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; begin<br>
//&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; dout&lt;=din;<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; dout &lt;= (din &lt;&lt; sp);<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; sp&lt;=sp+24;<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; end<br>
<br>
endmodule

CCIE 发表于 2010-6-26 05:07:03

学习一下,哈哈

interi 发表于 2010-6-26 05:25:27

好像不对

FFT 发表于 2010-6-26 07:24:12

原帖由 touchtony 于 2006-5-19 17:54 发表<br>
想用变量表示数组的一段,这样子赋值比较方便,<br>
不过从报错情况来看,<br>
表示数组的一个元素dout的用法是可以的<br>
表示连续的几个就不行,如下面程序的dout<br>
<br>
当然,可以很麻烦的一位位赋值<br>
<br>
想问问有没有好的技 ... "output dout;<br>
<br>
reg dout;"<br>
<br>
原文中可以这样定义么?

HDL 发表于 2010-6-26 09:01:42

怎么好多人都问这个...<br>
那个是笔误,已经改了<br>
<br>
我想我的意思大家应该明白的吧...

UFO 发表于 2010-6-26 09:27:46

引用数组的某些数据时,里面不能有变量吧

CHAN 发表于 2010-6-26 10:14:22

是不是dout&lt;=din;<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; sp&lt;=sp+24;<br>
的问题[]里有变量;<br>
可以考虑用dout&lt;={dout,dout};<br>
实现位移再赋值<br>
试了能综合,就是不知道是不是可靠

HDL 发表于 2010-6-26 11:20:30

我觉得老实的去写最好<br>
在后面验证的时候就少犯错<br>
也要综合出最有效率的网表
页: [1] 2 3
查看完整版本: 问个verilog技巧