VHDL中如何实现这样的操作 请进入 谢谢

[复制链接]
3370|16
 楼主| x_tin 发表于 2011-11-15 16:18 | 显示全部楼层 |阅读模式
本帖最后由 x_tin 于 2011-11-15 16:19 编辑

SIGNAL a:  STD_LOGIC_VECTOR(127 DOWNTO 0);  --
SIGNAL b:  STD_LOGIC_VECTOR(127 DOWNTO 0);  --
SIGNAL c:  STD_LOGIC_VECTOR(127 DOWNTO 0);  --
SIGNAL d:  STD_LOGIC_VECTOR(6   DOWNTO 0);  --

想要实现如下:

c(127 DOWNTO 0) <= a(vBuf DOWNTO 0) &  b(127 DOWNTO (1 + vBuf));

其中,  vBuf是可变的,   vBuf:=conv_integer(d(6 DOWNTO 0));

感谢。

现在这样写 可以前仿真,但是实际工作不行。
AutoESL 发表于 2011-11-15 16:26 | 显示全部楼层
可以自己实现,用一组case语句
AutoESL 发表于 2011-11-15 16:27 | 显示全部楼层
switch(vBuf)
  case 0:  c(127 DOWNTO 0) <= a(0 DOWNTO 0) &  b(127 DOWNTO (1 + 0));
  case 1:  c(127 DOWNTO 0) <= a(1 DOWNTO 0) &  b(127 DOWNTO (1 + 1));
....
.....
GoldSunMonkey 发表于 2011-11-15 17:19 | 显示全部楼层
switch(vBuf)
  case 0:  c(127 DOWNTO 0)
AutoESL 发表于 2011-11-15 16:27

这样CASE语句太多了。
GoldSunMonkey 发表于 2011-11-15 17:20 | 显示全部楼层
SIGNAL a:  STD_LOGIC_VECTOR(127 DOWNTO 0);  --
SIGNAL b:  STD_LOGIC_VECTOR(127 DOWNTO 0);  --
SIGNAL c:  STD_LOGIC_VECTOR(127 DOWNTO 0);  --
SIGNAL d:  STD_LOGIC_VECTOR(6   DOWNTO 0);  --

想要实现如 ...
x_tin 发表于 2011-11-15 16:18

贴实际波形
 楼主| x_tin 发表于 2011-11-15 17:34 | 显示全部楼层
谢谢 AutoESL 语句确实有点多。
下面是 图示

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| x_tin 发表于 2011-11-16 08:13 | 显示全部楼层
顶起来。
AutoESL 发表于 2011-11-16 10:20 | 显示全部楼层
这样CASE语句太多了。
GoldSunMonkey 发表于 2011-11-15 17:19

我觉得底层电路就应该是这样的
就算你写成变量的这种形式,XST/Synplify综合之后还是会弄成这样子吧
AutoESL 发表于 2011-11-16 10:22 | 显示全部楼层
你们觉得他想要的功能应该对应成什么样的硬件结构呢?
AutoESL 发表于 2011-11-16 10:22 | 显示全部楼层
谢谢 AutoESL 语句确实有点多。
下面是 图示
x_tin 发表于 2011-11-15 17:34

用桶式移位器吧
westmas 发表于 2011-11-16 10:55 | 显示全部楼层
我觉得用移位要好些,
 楼主| x_tin 发表于 2011-11-16 11:56 | 显示全部楼层
谢谢,就是这个桶式移位器的功能。
现在用CASE语句 封装成一个FUNCTION ,然后调用的。回头试试这个桶式移位器的写发 看编译后结果如何。
非常感谢。
 楼主| x_tin 发表于 2011-11-16 11:58 | 显示全部楼层
我觉得底层电路就应该是这样的
就算你写成变量的这种形式,XST/Synplify综合之后还是会弄成这样子吧
AutoESL 发表于 2011-11-16 10:20

我也觉得底层电路应该就是这种结构,就是想找个方便的写法 呵呵。
AutoESL 发表于 2011-11-16 16:11 | 显示全部楼层
我也觉得底层电路应该就是这种结构,就是想找个方便的写法 呵呵。
x_tin 发表于 2011-11-16 11:58

方便的写法就看综合工具的支持程度了
最方便的写法就是用变量做下标去取相应的位,也就是你发帖里面那样写
不知道ISE支不支持这样的
AutoESL 发表于 2011-11-16 16:12 | 显示全部楼层
另外就是用移位,移位的位数还是这个变量,不知道ISE支不支持
 楼主| x_tin 发表于 2011-11-16 16:21 | 显示全部楼层
谢谢你,第一种方法 前仿真可以 ,可以综合,但是他就不检查位数是否对了,可能是因为有变量的原因,而且运行结果也是不对的。所以从这个看ISE是不支持的。后一种没试 。  现在就用你一开始说的方法,用CASE,然后放在另外一个VHD文件中,还有就是你说的桶式移位器也行,然后是从网上搜了 有用FOR实现的。回头有时间试试。
GoldSunMonkey 发表于 2011-11-16 22:29 | 显示全部楼层
嗯,可能桶形移位器是最好的方案。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

35

主题

153

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部