在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 5532|回复: 6

[原创] 大侠看招:讨厌的Quartus寄存器优化

[复制链接]
发表于 2010-7-29 17:01:14 | 显示全部楼层 |阅读模式
5资产
各位前辈,小弟下面有一个简单的代码,目的是将进来的14位宽的数据锁存并凑成32位宽的数据串行输出。串行输出格式为:第31位到24位为固定的“E4”;第23位到10位为原始进来的数据;最后十位为固定的“0101010101”。在功能仿真时会发生一个怪现象,temp的前8位也就是“E4”没有显示,temp的后10位被X、U代替!只有中间14位(输入值为”EAA“)正常输出!如下图所示:
                                                                         signaltap.jpg                                                
        在用逻辑分析仪signaltap观察信号时,更奇怪了,发现整个寄存器32位的temp竟然没有变化,始终保持某个固定值!
        我猜测是quartus的编译器将temp中的常量位给优化了,但又想不出有什么办法禁止quartus对常量寄存器做优化,所以在此向各位前辈请教了。

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;

entity serial_out is
port (  
         clkin  : in std_logic;
         cntout:in std_logic_vector(7 downto 0);              --锁存计数器,由外界控制
         parallel:in std_logic_vector(13 downto 0);
         serial ut  std_logic
      );
end entity;
architecture behav of serial_out is
signal temp :std_logic_vector(31 downto 0);
begin
process(clkin,cntout,temp)
variable i:integer range 0 to 31;
begin
    if clkin'event and clkin='1' then
         if cntout=0 then
               temp(9 downto 0)<="0101010101";                 
               temp(23 downto 10)<=parallel;
               temp(31 downto 24)<="11100100";
               i:=31;
        else
               i:=i-1;
       end if;
    end if;
      serial<=temp(i);
end process;
end behav;

发表于 2010-7-29 17:18:03 | 显示全部楼层
哥们儿你的代码风格有问题。。。。。。
 楼主| 发表于 2010-7-29 17:40:54 | 显示全部楼层
本帖最后由 zhinvxing 于 2010-7-29 21:23 编辑

谢谢您的建议。如果我将temp的位宽改为14位,功能仿真和时序仿真的结果是正确的,而逻辑分析仪看到的temp却保持一个固定值。写成上面的32位宽,并将多余的位设为常值也会出现上面的问题。您说的代码风格问题是什么,请说明白一点好吗?
PS:我之前认为是寄存器优化的观点,看来的确是代码的问题。
 楼主| 发表于 2010-7-29 21:24:51 | 显示全部楼层
可如果是代码风格的问题,那为什么功能仿真和时序仿真又都正确的(都能看到temp随着datain在变化!)
 楼主| 发表于 2010-7-29 23:17:44 | 显示全部楼层
顶上去
发表于 2010-7-30 09:23:51 | 显示全部楼层
先确定你用逻辑分析仪得到的是没错的,可以引到某个管脚或者让你的temp自增1来观察
然后看你的综合报告,temp到底有没有被优化或部分优化
 楼主| 发表于 2010-7-30 11:20:00 | 显示全部楼层
哎,原来是复位代码写得不全造成的。结贴!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

×

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-4-25 20:48 , Processed in 0.027593 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表