完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
亲爱的大家,
我问的是一个非常基本的问题。 非常遗憾。 我的代码中有一个asignal,它被分配了一个值,如下所示! 信号gamma_s,gamma_sr:signed(15 donwnto 0):=“0000000000000000”; - 初始化为零。 gamma_s =“0111000100101110”; - 现在它的值为28974 现在,我想在第一个零之后插入一个小数位。 即。 0.111000100101110这只是32768的划分(右移15位)。 现在我的问题是:如何在vhdl中实现这一点? 将它右移15次后,当我将signed变量转换为整数时,如何读取结果0.8848。 我的结果(小数位数)有多准确? 感谢您的时间,精力和支持。 最好, 维迪亚。 以上来自于谷歌翻译 以下为原文 Dear all, I am asking a very basic question. Sorry for this. I have a signal in my code which is assigned a value as in below! signal gamma_s, gamma_sr : signed (15 donwnto 0) := "0000000000000000"; -- Intialized as Zero. gamma_s = "0111000100101110"; -- Now it has a value 28974 Now, I want to insert a fraction bit after the first zero. ie. 0.111000100101110 which is nothing but division by 32768 (shifting right by 15 bits). Now my question is: How can I realize this in vhdl? After shifting it right by 15 times, when I convert the signed variable to integer, how can i read the result 0.8848. How accurate will be my result (to how many decimal places)? Thank your for your time, effort and support. Best, Vidya. |
|
相关推荐
4个回答
|
|
我尝试过这样的事情:总是给我零点。
gamma_sr Ofcourse,当它通过在左边插入零来向右移动一切时,它应该是零。 但这不是我想要的。 如果您已经有过这方面的经验,请帮助我。 以上来自于谷歌翻译 以下为原文 I have tried something like this: Gives me always zero somehow. gamma_sr <= shift_right(gamma_s, 15); Ofcourse, when it shifts everything to the right by inserting zero on the left, it should be a zero. But this is not what I wanted. Please help me if you have already got experience with this. |
|
|
|
'numeric_std'中定义的'signed'和'unsigned'类型用于表示使用2的Complement表示法的整数,因此LSB的值为1.可以(ab)使用不同的LSB值,
例如1/16,但是你负责跟踪在任何点应用的缩放。 如果你只是增加和减去相当简单,如果你正在增加则更难。 ------------------------------------------“如果它不起作用 模拟,它不会在板上工作。“ 以上来自于谷歌翻译 以下为原文 The 'signed' and 'unsigned' types defined in 'numeric_std' are intended to represent integers using 2's Complement notation, and so the value of the LSB is 1. It is possible to (ab)use them with a different value of LSB, such as 1/16, but then you are responsible for keeping track of the scaling applied at any point. Fairly simple if you are just adding and subtracting, harder if you are multiplying. ------------------------------------------ "If it don't work in simulation, it won't work on the board." |
|
|
|
我不是VHDL数学方面的专家,但我记得几年前一位同事处理分数(我认为是空间滤波)。
他使用了两个std_logic_vectors来表示小数点左边的那些和右边的那些。 在某些时候,需要应用正确的缩放 - 这是我不知道如何做到的地方! - 但是在实际评估之前进行操作可能更容易处理表示整数和小数部分的不同向量。 在您的情况下,需要将整个矢量从一个矢量复制到另一个: gamma_dec_frac gamma_integer'0'); 对不起,我无法提供任何帮助(如果确实可以认为这有帮助!)。 问候, 霍华德 ----------“我们必须学会做的事情,我们从实践中学习。” - 亚里士多德 以上来自于谷歌翻译 以下为原文 I am no expert at maths in VHDL but I remember a colleague from some years ago dealing with fractions (for spatial filtering, I think). He used two std_logic_vectors to represent those to the left of the decimal point and those to the right. At some point, the correct scaling will need to be applied - and this is where I don't know how to do it! - but for manipulation prior to actual evaluation it may be easier to handle to different vectors representing the integer and decimal fraction. In your case, the entire vector needs to be copied from one to the other: gamma_dec_frac <= gamma_integer; gamma_integer <= (others => '0'); Sorry I couldn't be any more help (if, indeed, that could be considered help!). Regards, Howard ---------- "That which we must learn to do, we learn by doing." - Aristotle |
|
|
|
vkantamn写道:
亲爱的大家, 我问的是一个非常基本的问题。 非常遗憾。 我的代码中有一个asignal,它被分配了一个值,如下所示! 信号gamma_s,gamma_sr:signed(15 donwnto 0):=“0000000000000000”; - 初始化为零。 gamma_s =“0111000100101110”; - 现在它的值为28974 现在,我想在第一个零之后插入一个小数位。 即。 0.111000100101110这只是32768的划分(右移15位)。 现在我的问题是:如何在vhdl中实现这一点? 将它右移15次后,当我将signed变量转换为整数时,如何读取结果0.8848。 我的结果(小数位数)有多准确? 感谢您的时间,精力和支持。 您想要使用的是新的固定库。 Seehere(pdf)了解详情。 Xilinx是否支持它? 我不知道! ----------------------------是的,我这样做是为了谋生。 以上来自于谷歌翻译 以下为原文 vkantamn wrote:What you want to use is the new fixed library. See here (pdf) for details. Does Xilinx support it? I don't know! ----------------------------Yes, I do this for a living. |
|
|
|
只有小组成员才能发言,加入小组>>
2298 浏览 7 评论
2705 浏览 4 评论
Spartan 3-AN时钟和VHDL让ISE合成时出现错误该怎么办?
2192 浏览 9 评论
3274 浏览 0 评论
如何在RTL或xilinx spartan fpga的约束文件中插入1.56ns延迟缓冲区?
2336 浏览 15 评论
有输入,但是LVDS_25的FPGA内部接收不到数据,为什么?
613浏览 1评论
1670浏览 1评论
171浏览 1评论
637浏览 0评论
1825浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-9-11 18:16 , Processed in 1.387877 second(s), Total 84, Slave 67 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191