什么';这个vhdl代码怎么了?

什么';这个vhdl代码怎么了?,vhdl,Vhdl,此结构计数器必须按以下方式计数: 0…90…90…3又一次。。。 我认为我的问题是在最后的距离,在gtk浪潮中,我只有与计数器2的问题!我不知道为什么,请帮忙 -----------组件实例化----------- 信号sR2、sE2、sR1:std_逻辑; 信号s2、s3、s8:std_逻辑; 信号s0sec、s1sec、s2sec:标准逻辑; 信号c1out、c2out:std_逻辑_向量(3到0); 信号Dec1输出,Dec2输出:标准逻辑向量(15向下至0); 开始 i2:计数器1端口

此结构计数器必须按以下方式计数: 0…90…90…3又一次。。。 我认为我的问题是在最后的距离,在gtk浪潮中,我只有与计数器2的问题!我不知道为什么,请帮忙

-----------组件实例化-----------
信号sR2、sE2、sR1:std_逻辑;
信号s2、s3、s8:std_逻辑;
信号s0sec、s1sec、s2sec:标准逻辑;
信号c1out、c2out:std_逻辑_向量(3到0);
信号Dec1输出,Dec2输出:标准逻辑向量(15向下至0);
开始
i2:计数器1端口映射(clk=>clk,reset=>sR1,count1=>c1out);
i3:计数器2端口映射(clk=>clk,reset=>sR2,en2=>sE2,count2=>c2out);
i5:deco端口映射(二进制输入=>c1out,解码器输出=>dec1out);
i6:deco端口映射(二进制输入=>c2out,解码器输出=>dec2out);

sR1你实际上没有说你看到的问题是什么。这使得很难提供帮助

首先,虽然我可以假设计数器块的功能是什么,但装饰块是一个谜。这是什么

            s2 <= dec1out(2); --_a _b c _d 0010
            s3 <= dec1out(3); --_a _b c d 0011
            s8 <= dec1out(8); -- a _b _c _d 1000
            s0sec <= dec2out(0); -- _a _b _c _d 0000
            s1sec <= dec2out(1); -- _a _b _c d 0001
            s2sec <= dec2out(2); -- _a _b c _d 0010

你做每件事都太早了吗?在8而不是9上启用和重置。

不必详细说明,我认为您应该将策略更改为具有单个设置/重置计时器的有限状态机。然后,您可以在每个状态中设置时间延迟,并在其间重置它。您可以驱动一个信号,指示状态之间转换的某个高计数结束。代码将比您拥有的要整洁得多

在分配sR1、sR2、sE2时,您是否仔细检查了表达式?它们并不明显,因此您可能需要添加一些注释(或编写更简单的代码)。问题是什么?你认为哪些行为是不正确的?你能发布一些波形或信号值序列的图片,并指出应该有什么不同吗?@MartinThompson-Hi!谢谢你的回答。计数器1的每个连接都工作正常(R1信号除外)。关于计数器2的每个连接在gtkwave中返回一个红色值(“U”)。我不明白为什么。如果这没有帮助,我会把一个屏幕从波形!谢谢。@Paul你好!谢谢你的回答。为了更好地理解我的计数器,我画了一张图表。谢谢
counter1
counter2
是否独立工作?其他地方有我们吗?可能会编辑您的问题以发布计数器代码和
deco
任何内容。尽量减少代码行数,因为我们都必须费力地完成!
            s2 <= dec1out(2); --_a _b c _d 0010
            s3 <= dec1out(3); --_a _b c d 0011
            s8 <= dec1out(8); -- a _b _c _d 1000
            s0sec <= dec2out(0); -- _a _b _c _d 0000
            s1sec <= dec2out(1); -- _a _b _c d 0001
            s2sec <= dec2out(2); -- _a _b c _d 0010
            sR1 <= ((s8 and (s0sec or s1sec)) or (s2sec and s2)) or reset;
            sR2 <= (s2 and s2sec);
            sE2 <= s8;
Reset counter1 when counter1 is 8 and counter2 is [0..1] or    -- 00..08, 10..18
                    counter1 is 2 and counter2 is 2            -- 20..22
Reset counter2 when counter1 is 2 and counter2 is 2            -- 22
Enable counter2 when counter1 when is 8                        -- 08, 18