集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 7092|回复: 22

问个verilog技巧

[复制链接]
AAT 发表于 2010-6-26 00:54:06 | 显示全部楼层 |阅读模式
想用变量表示数组的一段,这样子赋值比较方便,
不过从报错情况来看,
表示数组的一个元素dout[sp]的用法是可以的
表示连续的几个就不行,如下面程序的dout[sp+23:sp]

当然,可以很麻烦的一位位赋值

想问问有没有好的技巧可以实现这个功能

示意代码如下:

module tm(clk,din,dout);

input clk;
input [23:0] din;
output [255:0] dout;

reg [255:0] dout;

reg [4:0] sp;

always@(posedge clk)
if(sp==4)
sp<=0;
else
begin
dout[sp+23:sp]<=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 [23:0] din;<br>
output [7:0] dout;<br>
<br>
reg [255:0] dout;<br>
<br>
reg [4:0] 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[sp+23:sp]&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 [7:0] dout;<br>
<br>
reg [255:0] 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[sp+23:sp]&lt;=din;<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; sp&lt;=sp+24;<br>
的问题[]里有变量;<br>
可以考虑用dout&lt;={dout[23:0],dout[255:24]};<br>
实现位移再赋值<br>
试了能综合,就是不知道是不是可靠
HDL 发表于 2010-6-26 11:20:30 | 显示全部楼层
我觉得老实的去写最好<br>
在后面验证的时候就少犯错<br>
也要综合出最有效率的网表
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

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

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2025-5-6 17:25 , Processed in 0.066675 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表