9839|31

35

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

有人用过Altera的乘法浮点数IP核么? [复制链接]

 
本帖最后由 huangfujing 于 2016-6-30 11:11 编辑

最近在用浮点数IP核,遇到一个问题,如下图,一个是在时钟上升沿输入的数据,一个是在下降沿输入的数据,为什么输出的结果不一样啊?而且在上升沿输入的数据计算的结果是错误的,求解。。。。

此帖出自FPGA/CPLD论坛

最新回复

这个很简单啊,书上一堆呢   详情 回复 发表于 2020-5-14 17:22
点赞 关注
 

回复
举报

1950

帖子

4

TA的资源

版主

沙发
 
乘法器用上升沿是对的,下降沿做就不要多想了。

要么看 sim设定的 时间
要么看下手册的注意事项
要么把传递给 乘法器的那个DFF,加上 #几个ns
此帖出自FPGA/CPLD论坛
个人签名MicroPython中文社区https://micropython.org.cn/forum/  
 
 

回复

169

帖子

1

TA的资源

一粒金砂(高级)

板凳
 
我用了很多次了,没有出现过你这种情况
此帖出自FPGA/CPLD论坛

赞赏

1

查看全部赞赏

 
 
 

回复

35

帖子

0

TA的资源

一粒金砂(中级)

4
 
5525 发表于 2016-6-30 11:53
乘法器用上升沿是对的,下降沿做就不要多想了。

要么看 sim设定的 时间
要么看下手册的注意事项
要 ...

可是上升沿输出的结果有问题啊,下降沿才输出正确的结果
此帖出自FPGA/CPLD论坛
 
 
 

回复

35

帖子

0

TA的资源

一粒金砂(中级)

5
 
yupc123 发表于 2016-6-30 12:10
我用了很多次了,没有出现过你这种情况

之前也用过,但是今天才发现做连续输入两个数据的时候计算是有问题的
此帖出自FPGA/CPLD论坛
 
 
 

回复

1950

帖子

4

TA的资源

版主

6
 
换了下降沿的,这么一来 传数据给core,core在传数据给你,这里可就都是非同期了。

方便的话,能发sim的环境发过来吗,我跑跑看。
此帖出自FPGA/CPLD论坛
个人签名MicroPython中文社区https://micropython.org.cn/forum/  
 
 
 

回复

169

帖子

1

TA的资源

一粒金砂(高级)

7
 
huangfujing 发表于 2016-6-30 14:25
之前也用过,但是今天才发现做连续输入两个数据的时候计算是有问题的


这是我的设置,这个IP是流水线工作,5个clk后得到结果,
我怀凝你不会流水线编程,同时问题也没有说清楚,最好把IP的测试程上贴上来
此帖出自FPGA/CPLD论坛

赞赏

1

查看全部赞赏

 
 
 

回复

35

帖子

0

TA的资源

一粒金砂(中级)

8
 
yupc123 发表于 2016-7-1 08:11
这是我的设置,这个IP是流水线工作,5个clk后得到结果,
我怀凝你不会流水线编程,同时问题也没有说清 ...

LIBRARY ieee;                                               
USE ieee.std_logic_1164.all;                                

ENTITY mult2_vhd_tst IS
END mult2_vhd_tst;
ARCHITECTURE mult2_arch OF mult2_vhd_tst IS
-- constants   
constant ClockPeriod : TIME := 20 ns;                                             
-- signals                                                   
SIGNAL aclr : STD_LOGIC;
SIGNAL clk_en : STD_LOGIC;
SIGNAL clock : STD_LOGIC;
SIGNAL dataa : STD_LOGIC_VECTOR(31 DOWNTO 0);
SIGNAL datab : STD_LOGIC_VECTOR(31 DOWNTO 0);
SIGNAL result : STD_LOGIC_VECTOR(31 DOWNTO 0);
COMPONENT mult2
        PORT (
        aclr : IN STD_LOGIC;
        clk_en : IN STD_LOGIC;
        clock : IN STD_LOGIC;
        dataa : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
        datab : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
        result : OUT STD_LOGIC_VECTOR(31 DOWNTO 0)
        );
END COMPONENT;
BEGIN
        i1 : mult2
        PORT MAP (
-- list connections between master ports and signals
        aclr => aclr,
        clk_en => clk_en,
        clock => clock,
        dataa => dataa,
        datab => datab,
        result => result
        );
init : PROCESS                                               
-- variable declarations                                    
BEGIN                                                        
        -- code that executes only once   
         aclr<='1';
                clk_en<='0';
                  wait for 30ns;
                aclr<='0';
                clk_en<='1';                  
                dataa<="01000000000000000000000000000000"; --2
                datab<="01000010000000000000000000000000";--32
                wait for 20ns;
                --s<="001";
                dataa<="00111111100000000000000000000000";-- 1
                datab<="11000010100000000000000000000000"; -- -64
                wait for 20ns;
                --s<="001";
                dataa<="00000000000000000000000000000000"; --0
                datab<="00000000000000000000000000000000";--0                          
WAIT;                                                      
END PROCESS init;                                          
always : PROCESS                                             
-- optional sensitivity list                                 
-- (        )                                                
-- variable declarations                                      
BEGIN                                                         
        -- code executes for every event on sensitivity list  
clock<='0';
                wait for (ClockPeriod/2);
                clock<='1';
                wait for (ClockPeriod/2);                                                      
END PROCESS always;                                          
END mult2_arch;
此帖出自FPGA/CPLD论坛
 
 
 

回复

35

帖子

0

TA的资源

一粒金砂(中级)

9
 
5525 发表于 2016-6-30 22:36
换了下降沿的,这么一来 传数据给core,core在传数据给你,这里可就都是非同期了。

方便的话,能发sim的 ...

LIBRARY ieee;                                               
USE ieee.std_logic_1164.all;                                

ENTITY mult2_vhd_tst IS
END mult2_vhd_tst;
ARCHITECTURE mult2_arch OF mult2_vhd_tst IS
-- constants   
constant ClockPeriod : TIME := 20 ns;                                             
-- signals                                                   
SIGNAL aclr : STD_LOGIC;
SIGNAL clk_en : STD_LOGIC;
SIGNAL clock : STD_LOGIC;
SIGNAL dataa : STD_LOGIC_VECTOR(31 DOWNTO 0);
SIGNAL datab : STD_LOGIC_VECTOR(31 DOWNTO 0);
SIGNAL result : STD_LOGIC_VECTOR(31 DOWNTO 0);
COMPONENT mult2
        PORT (
        aclr : IN STD_LOGIC;
        clk_en : IN STD_LOGIC;
        clock : IN STD_LOGIC;
        dataa : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
        datab : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
        result : OUT STD_LOGIC_VECTOR(31 DOWNTO 0)
        );
END COMPONENT;
BEGIN
        i1 : mult2
        PORT MAP (
-- list connections between master ports and signals
        aclr => aclr,
        clk_en => clk_en,
        clock => clock,
        dataa => dataa,
        datab => datab,
        result => result
        );
init : PROCESS                                               
-- variable declarations                                    
BEGIN                                                        
        -- code that executes only once   
         aclr<='1';
                clk_en<='0';
                  wait for 30ns;
                aclr<='0';
                clk_en<='1';                  
                dataa<="01000000000000000000000000000000"; --2
                datab<="01000010000000000000000000000000";--32
                wait for 20ns;
                --s<="001";
                dataa<="00111111100000000000000000000000";-- 1
                datab<="11000010100000000000000000000000"; -- -64
                wait for 20ns;
                --s<="001";
                dataa<="00000000000000000000000000000000"; --0
                datab<="00000000000000000000000000000000";--0                          
WAIT;                                                      
END PROCESS init;                                          
always : PROCESS                                             
-- optional sensitivity list                                 
-- (        )                                                
-- variable declarations                                      
BEGIN                                                         
        -- code executes for every event on sensitivity list  
clock<='0';
                wait for (ClockPeriod/2);
                clock<='1';
                wait for (ClockPeriod/2);                                                      
END PROCESS always;                                          
END mult2_arch;
此帖出自FPGA/CPLD论坛
 
 
 

回复

1950

帖子

4

TA的资源

版主

10
 
huangfujing 发表于 2016-7-1 09:15
LIBRARY ieee;                                               
USE ieee.std_logic_1164.all;         ...

楼主,你好,
你能把你的能跑的环境,去掉里面的临时生成的文件,打个包,贴上来吗。
如果你用到那个库,顺便也把那个文件放在包里面,

这样你的环境,到哪里,只要有modelsim都能独立跑了。交流起来也方便。
此帖出自FPGA/CPLD论坛
个人签名MicroPython中文社区https://micropython.org.cn/forum/  
 
 
 

回复

1950

帖子

4

TA的资源

版主

11
 
yupc123 发表于 2016-7-1 08:11
这是我的设置,这个IP是流水线工作,5个clk后得到结果,
我怀凝你不会流水线编程,同时问题也没有说清 ...

yupc123 图上面的细节 都是重要信息啊,
“Match project/default” -> 勾选了这个,FPGA一致了,综合才好放进去
“Output latency”-> 乘法器支持数据流计算,连续给N个数据,最后一个出结果的时间就是N+6
“Use dedicated multipler circuirtry”这个正常都是选的,用硬核,不得己采用逻辑搭
此帖出自FPGA/CPLD论坛
个人签名MicroPython中文社区https://micropython.org.cn/forum/  
 
 
 

回复

35

帖子

0

TA的资源

一粒金砂(中级)

12
 
5525 发表于 2016-7-1 23:14
yupc123 图上面的细节 都是重要信息啊,
“Match project/default” -> 勾选了这个,FPGA一致了,综合才 ...

恩,我都选了的啊
此帖出自FPGA/CPLD论坛
 
 
 

回复

35

帖子

0

TA的资源

一粒金砂(中级)

13
 
5525 发表于 2016-7-1 23:06
楼主,你好,
你能把你的能跑的环境,去掉里面的临时生成的文件,打个包,贴上来吗。
如果你用到那个库 ...

mult.rar (9.34 MB, 下载次数: 36)
此帖出自FPGA/CPLD论坛
 
 
 

回复

1950

帖子

4

TA的资源

版主

14
 
本帖最后由 5525 于 2016-7-2 16:31 编辑

把你 9楼的帖子做 tb_top,
  i1 : mult2 改成 i1 : mult  跑了之后,结果贴在下面,如图,不要改时钟延,"貌似"结果出来了,

顺便,浮点的结果在modelsim 是可以选择的。

altera mult.png (77.16 KB, 下载次数: 2)

altera mult.png
此帖出自FPGA/CPLD论坛
个人签名MicroPython中文社区https://micropython.org.cn/forum/  
 
 
 

回复

1950

帖子

4

TA的资源

版主

15
 
仿真的时候,也得尽量按同步逻辑来写,这是原则

就是你的,
  1. 用送给 MULT的那个时钟,来生成送给MULT的数
  2. 拿乘法器的数据,也要同步那,就是用你的 clock来拿

这个结果就是要你的啦。

clock edge.png (50.31 KB, 下载次数: 0)

clock edge.png
此帖出自FPGA/CPLD论坛
个人签名MicroPython中文社区https://micropython.org.cn/forum/  
 
 
 

回复

1950

帖子

4

TA的资源

版主

16
 
老实说,大夏天弄这个比较热,
下次能不能把代码稍微整理下,丢东西上啦 也写个简单的说明啥的,
这个不管谁看到了,要不要那么费力气 是啊
此帖出自FPGA/CPLD论坛
个人签名MicroPython中文社区https://micropython.org.cn/forum/  
 
 
 

回复

35

帖子

0

TA的资源

一粒金砂(中级)

17
 
5525 发表于 2016-7-2 16:36
老实说,大夏天弄这个比较热,
下次能不能把代码稍微整理下,丢东西上啦 也写个简单的 ...

因为就是生成的IP核,我想着说也没什么需要注释啊,谢谢耐心的解答
此帖出自FPGA/CPLD论坛
 
 
 

回复

35

帖子

0

TA的资源

一粒金砂(中级)

18
 
5525 发表于 2016-7-2 16:20
把你 9楼的帖子做 tb_top,
  i1 : mult2 改成 i1 : mult  跑了之后,结果贴在下面,如图,不要改时钟延," ...


我的modelsim怎么没有32位浮点数显示的啊??
此帖出自FPGA/CPLD论坛
 
 
 

回复

1950

帖子

4

TA的资源

版主

19
 
肉眼看,运算时有点累 哈。
我用的是 ModelSim-Altera 10.3d (Quartus II 15.0),Altera 网站上下载的免费版本。
此帖出自FPGA/CPLD论坛
个人签名MicroPython中文社区https://micropython.org.cn/forum/  
 
 
 

回复

35

帖子

0

TA的资源

一粒金砂(中级)

20
 
5525 发表于 2016-7-3 15:40
肉眼看,运算时有点累 哈。
我用的是 ModelSim-Altera 10.3d (Quartus II 15.0),Altera 网站上下载的免费 ...

恩恩,那我去下一个试试,因为我用的quartus II 14.0,版本上应该没什么问题吧?
此帖出自FPGA/CPLD论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表