Xilinx VHDL 时序问题怎么解决

2019-03-25 08:51发布

做了一个状态机与一个RAM相连,状态机发3个地址给RAM,通过一个端口先后读进3个数,然后通过3个端口输出。

问题来了,这3个数的值总是一样的或者顺序是乱的。

要不要连个寄存器呢?求高人指点。

[ 本帖最后由 dongxh 于 2012-10-26 01:30 编辑 ] 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
9条回答
dongxh
2019-03-26 16:42
谢谢指点,还是有问题。

when S1_FETCH=>

                 rena <= '0';
                 rwea <= "0";
                 renb <= '1';
                 saddrb <= saddr_i & saddr_k;
                 ra <= sdoutb;
                 rce <= '0';
                 ren <= '0';
                 NEXT_STATE <= S2_FETCH;
                  
                 
          when S2_FETCH=>

                 rena <= '0';
                  rwea <= "0";
                 renb <= '1';
                 saddrb <= saddr_k & saddr_j;
                 rb <= sdoutb;
                 rce <= '0';
                 ren <= '0';
                 NEXT_STATE <= S3_ADD;
                 
          when S3_ADD=>

                 rena <= '0';
                 rwea <= "0";
                 renb <= '0';
                 rce <= '1';
                 ren <= '0';
                 NEXT_STATE <= S4_FETCH;
                 
          when S4_FETCH=>

                 rena <= '0';
                 rwea <= "0";
                 renb <= '1';
                 saddrb <= saddr_i & saddr_j;
                 rc <= sdoutb;
                 rce <= '0';
                 ren <= '0';
                 NEXT_STATE <= S5_COMP;

我是通过saddra发给RAM 3个地址。
通过sdoutb接受,并分配给ra,rb,rc这3个端口输出,结果这3个端口的输出都是一样的。
按你的提示我加了10ps的延迟,如下。也就是发完地址等一个时钟周期再接受,可还是不成。
我又改成了40ps,80ps,100ps仍然是错的。

再提个问题,我模拟的时候时钟周期是10ps,是不是有点短,还有怎么选择时钟周期比较好呢?因为我改变时钟周期,输出也会变。
                 rena <= '0';
                 rwea <= "0";
                 renb <= '1';
                 saddrb <= saddr_i & saddr_k after 10ps;
                 ra <= sdoutb;
                 rce <= '0';
                 ren <= '0';
                 NEXT_STATE <= S2_FETCH;

一周热门 更多>