Vhdl 进位多路复用器的片分量分配

Vhdl 进位多路复用器的片分量分配,vhdl,Vhdl,我对VHDL有问题。我试图用一个计数器来实现一个非常慢的计时器。由于速度非常慢,计数器需要计数到20000000才能溢出。这意味着该计数器将使用25位计数器并进行比较 代码如下: runled_gen : process(resetb, clk0out) variable cnt2_temp : std_logic_vector(24 downto 0); variable toggle_en2 : std_logic; begin if resetb = '0

我对VHDL有问题。我试图用一个计数器来实现一个非常慢的计时器。由于速度非常慢,计数器需要计数到20000000才能溢出。这意味着该计数器将使用25位计数器并进行比较

代码如下:

    runled_gen : process(resetb, clk0out)
    variable cnt2_temp : std_logic_vector(24 downto 0);
    variable toggle_en2 : std_logic;
begin

    if resetb = '0' then
        pulse_cnt2 <= "0000000000000000000000000";
        pulse_out2 <= '0';

    elsif clk0out = '1' and clk0out'event then
        cnt2_temp := pulse_cnt2 + 1;

        if cnt2_temp >= "1001100010010110100000000" then
            pulse_cnt2 <= "0000000000000000000000000";
            pulse_out2 <= not pulse_out2;

        else
            pulse_cnt2 <= cnt2_temp;
            pulse_out2 <= pulse_out2;
        end if;
    end if;

    runled <= pulse_out2;

end process;
runled\u gen:进程(resetb,clk0out)
变量cnt2_temp:std_逻辑_向量(24到0);
变量切换_en2:标准_逻辑;
开始
如果resetb='0',则

pulse_cnt2MUXCY是Xilinx原语,因此我假设您的目标是他们的一个设备。该组件是一种特殊的硬接线2对1多路复用器,用于为加法器创建快速纹波进位链。它的设置使相邻位的进位将流经相邻的MUXCY,以最小化进位的传播时间

此警告告诉您,“>=”比较器位-10之间的MUXCY路径必须在交换结构上路由,然后才能馈送计数器位-0的进位逻辑

比较器本质上是25位加法器之外的25位减法器。这导致创建了大量组合逻辑,从而阻止放置者获得最佳的时间。如果仍然满足时间限制,则可以安全地忽略此警告

您可以首先将比较器结果注册到单独的信号中,从而打破组合路径:

信号gte:std_逻辑;
...
--比原始计数少一个,以说明1个周期的延迟
如果cnt2_temp>=“1001100010110011111”,则

gte您使用什么FPGA?你的代码一点也不正确。你经常以一种奇怪的方式使用变量和信号。你能在这里给我们完整的代码吗?我编辑了我的代码,像你说的那样使用了一个单独的信号。但是现在代码不起作用了。这是正确的吗<代码>如果resetb='0'则开始,然后脉冲2'0');脉冲输出2除了gte temp的复位条件缺失外,没有什么突出的。在模拟中,检查“U”或“X”是否在信号中传播。您去掉了cnt2_temp变量,现在通过信号赋值递增计数器,因此代码中的其他地方可能会产生一些副作用。通常,在对基于
std\u ulogic
的类型执行算术时,应使用
ieee.numeric\u std
中定义的
unsigned
signed
类型。
unsigned
的“+”运算符被重载,以支持右侧的整数,而不是添加位文字“1”。