微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 用vhdl语言时寄存器何时产生何时写入数据

用vhdl语言时寄存器何时产生何时写入数据

时间:10-02 整理:3721RD 点击:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity fenpin is
        generic(pin : integer := 2);
        port (clk , reset : in std_logic;
                        output : inout std_logic);
end fenpin;
architecture Behavioral of fenpin is
begin
        process(clk , reset)
                variable a : integer range 0 to pin;
        begin
                if(reset = '1') then
                        a := 0;
                        output <= '0';
                elsif(clk ' event and clk = '1') then
                        a := a+1;
                        if(a = pin) then
                                a := 0;
                                output <= not output;
                        end if;
                end if;
        end process;
end Behavioral;
这是一个二分频的电路,单综合时会显示有a_1寄存器一直为0;当把pin改为3时便没有了警告;我想应该是在if判断是a=2没有写入寄存器而直接写入了a=0;所以一直为 00, 01 寄存器a_1 便一直为0。不知道我想的对不对所以想请大神们来说明一下原因并且赐教一下在什么情况下会产生寄存器和在什么情况下会向寄存器中写入数据。

建议你要先搞懂阻塞赋值与非阻塞赋值区别,阻塞赋值就是你用的:= 赋
值,是在这个时钟的上升沿直接变化的,非阻塞赋值是在下一个上升沿值
才发生变化,建议使用非阻塞赋值;还有就是一般使用signal,不使用变量。
根据你之前的程序这样就对了
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity fenpin is
        generic(pin : integer := 1);
        port (clk , reset : in std_logic;
                        output : inout std_logic);
end fenpin;
architecture Behavioral of fenpin is
signal  a : integer range 0 to pin;
begin
        process(clk , reset)
        begin
                if(reset = '1') then
                        a <= 0;
                        output <= '0';
                elsif(clk ' event and clk = '1') then
             if ( a < pin ) then
               a <= a + 1;
            else
               a <= 0 ;
             end if ;  
                        if(a = pin) then
                                output <= not output;
                         else
                      output <= output ;
                        end if;
                end if;
        end process;
end Behavioral;

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top