用VHDL语言对FPGA编程时,我用DDS的IP核产生一个14位的正弦信号sin_a,
答案:2 悬赏:40 手机版
解决时间 2021-04-05 00:00
- 提问者网友:末路
- 2021-04-04 13:52
用VHDL语言对FPGA编程时,我用DDS的IP核产生一个14位的正弦信号sin_a,
最佳答案
- 五星知识达人网友:蓝房子
- 2021-04-04 15:17
亲,试试下面这个,假设sin_a是14位的二进制数,dds_sine_buma就是最终的
首先要定义个中间传递信号:signal sine_buma :std_logic_vector(13 downto 0);--bu ma
再定义个最终的补码信号:signal dds_sine_buma :std_logic_vector(13 downto 0);--bu ma
sine_buma <=sin_a(13) & not sin_a(12 downto 0)+1;
dds_sine_buma <= sin_a WHEN sin_a(13)='0' ELSE
sine_buma WHEN sin_a(13)='1' ELSE
"ZZZZZZZZZZZZZZ";
就是,当最高位为0时,就把源码赋给dds_sine_buma,当最高位位1是就把(除符号位)各位取反再加1赋给dds_sine_buma,能看懂不?追问非常满意的答案,谢谢
首先要定义个中间传递信号:signal sine_buma :std_logic_vector(13 downto 0);--bu ma
再定义个最终的补码信号:signal dds_sine_buma :std_logic_vector(13 downto 0);--bu ma
sine_buma <=sin_a(13) & not sin_a(12 downto 0)+1;
dds_sine_buma <= sin_a WHEN sin_a(13)='0' ELSE
sine_buma WHEN sin_a(13)='1' ELSE
"ZZZZZZZZZZZZZZ";
就是,当最高位为0时,就把源码赋给dds_sine_buma,当最高位位1是就把(除符号位)各位取反再加1赋给dds_sine_buma,能看懂不?追问非常满意的答案,谢谢
全部回答
- 1楼网友:往事隔山水
- 2021-04-04 16:23
为什么会用到sin_a的补码形式呢?是取负值?
先说补码,补码的定义不就是取反加1嘛,那就直接用"~sin_a+1"就好啦,其实加不加1都无所谓,但是要注意是否出现溢出的问题,比如0,取反加1之后还是0;-32768取反加1还是-32768。欢迎追问~追问亲,补码的定义是正数(0开头的)的补码不变,负数的补码才需要(除符号位)各位取反再加1,我在做一些数据处理时就是要用到补码,谢谢追答你这不是挺明白的嘛,按你说的写逻辑就行了,不过有可能的话建议只取反不加1
先说补码,补码的定义不就是取反加1嘛,那就直接用"~sin_a+1"就好啦,其实加不加1都无所谓,但是要注意是否出现溢出的问题,比如0,取反加1之后还是0;-32768取反加1还是-32768。欢迎追问~追问亲,补码的定义是正数(0开头的)的补码不变,负数的补码才需要(除符号位)各位取反再加1,我在做一些数据处理时就是要用到补码,谢谢追答你这不是挺明白的嘛,按你说的写逻辑就行了,不过有可能的话建议只取反不加1
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯