搜索
bottom↓
回复: 16

VHDL中的移位运算符怎么用

[复制链接]

出0入0汤圆

发表于 2009-11-28 15:22:18 | 显示全部楼层 |阅读模式
SLL RLL

好多书里面都没有格式
晕死

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2009-11-28 15:28:01 | 显示全部楼层
YOUOUT[7 downto 1]<=YOUOUT[6 dowmto 0];

出0入0汤圆

 楼主| 发表于 2009-11-28 15:29:55 | 显示全部楼层
楼上这个办法可以

但是 要写 估计 好几十行

出0入0汤圆

 楼主| 发表于 2009-11-28 15:46:37 | 显示全部楼层
找到了


a  RLL 1;

a为 bit vector

出0入0汤圆

发表于 2009-12-26 20:28:18 | 显示全部楼层
a rll 1;好像不能被综合。

出0入0汤圆

发表于 2009-12-26 21:04:17 | 显示全部楼层
【4楼】 lishantian
为什么不能被综合啊?

VHDL的类型限定过于强,以至于很多时候出问题都是类型错误……

VHDL语言本身的这几个运算符是对bitvector定义的,而我们一般都用std_logic_vector,
这样就很导致一般不能编译通过。

而更不爽的是ieee.numeric_bit或者numeric_std包中都有重载sll之类,但是很讨厌的是
他们都是对signed/unsigned定义,没办法,
要是想给std_logic_vector用这几个移位运算符(sll, srl, sla, sra, rol, ror)
只得这样:
o <= to_stdlogicvector(to_bitvector(i) sll 1);

呵呵,不想这么麻烦的话,用Verilog吧,尤其是SystemVerilog,用起来舒服多了~

修改:附另一种形式的完成测试程序:
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity test is
        port (
                i: in std_logic_vector (10 downto 0);
                o: out std_logic_vector (10 downto 0)
        );
end entity test;
architecture a of test is begin
        o <= std_logic_vector(unsigned(i) sll 1);
end architecture a;
这个方法的好处是不会丢失X,因为unsigned和signed其实都是std_logic_vector。

出0入0汤圆

发表于 2009-12-27 12:39:38 | 显示全部楼层
VHDL里面有移位函数

出0入0汤圆

发表于 2009-12-27 14:22:50 | 显示全部楼层
像五楼说的一样,强制转换一下类型就是了哇。二楼的办法也可以的啊。

出0入0汤圆

发表于 2009-12-28 12:42:24 | 显示全部楼层
楼主我也跟你一样碰到相同的问题,我现在是用用VHDL语言编写y=a1*x1+a2*x2+a3*x3这样类似的数学表达式,其中乘法都用移位来转换了,但是实现起来真的是很麻烦,移位操作只能是bit_vector类型,而bit_vector又不支持加法减法操作,这个数学表达式,要写的很麻烦,我现在担心的是速度不知道能否达到我要求的60Mhz以上。

出0入0汤圆

发表于 2009-12-28 12:44:28 | 显示全部楼层
1.将要移位的变量转换为bit_vector类型
2.实现移位,并暂存
3.将所有移位暂存后的变量全部转换为integer类型
4.进行最后的interger类型的相加减。

真是很麻烦。

出0入0汤圆

发表于 2009-12-28 17:33:07 | 显示全部楼层
呵呵,用verilog就没8/9楼说的麻烦的问题了。
对于工程师来说,VHDL这样strong-typed语言其实不但不会有啥好处,反而会大幅降低工作效率。
工程师们需要的是像C那样灵活的语言,而不是Ada。

出0入4汤圆

发表于 2012-2-22 13:24:28 | 显示全部楼层
呵呵 我也碰到了这个问题 没看到有谁用这个移位运算符

出0入0汤圆

发表于 2012-2-22 14:54:30 | 显示全部楼层
好多啊

出0入0汤圆

发表于 2012-2-22 14:59:59 | 显示全部楼层
我也遇到了这种除法问题,必须用integer,不能用std_logic,要把接口定义为integer类型吗?还是要定义为std_logic后再将其强制类型转换为integer类型?????????

出0入0汤圆

发表于 2012-2-23 10:04:29 | 显示全部楼层
verilog的优点在门级描述,VHDL优点在系统级描述.

总拿这个数据类型来说事..... 又不是实现不了.  

a MOD 5 verilog怎么实现?
并发性语句verilog怎么实现?(同时执行多个指令)
verilog有链接库吗?

不知所云.

出0入0汤圆

发表于 2012-2-23 19:22:52 | 显示全部楼层
各有所长,每一种语言又有自己的用途。
不然就会被历史抛弃!

出0入0汤圆

发表于 2013-12-11 21:17:49 | 显示全部楼层
是啊,尤其是左移N位
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 05:26

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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