Logic VHDL正交解码器:顺序/组合逻辑
我正在用VHDL实现一个正交解码器,并提出了两个解决方案 在方法1中,所有逻辑都放在一个对时钟和复位敏感的进程中。 在Spartan-3A上,它使用四个片、七个FFs和四个输入LUT 代码1 quadr_解码器的行为体系结构是 信号信道电流:标准逻辑; 信号信道前置:标准逻辑; 信号信道电流:标准逻辑; 信号信道前置:标准逻辑; 开始 过程(n_重置,clk_进入)开始 如果(n_reset='0'),则 --初始化内部信号Logic VHDL正交解码器:顺序/组合逻辑,logic,vhdl,sequential,decoder,Logic,Vhdl,Sequential,Decoder,我正在用VHDL实现一个正交解码器,并提出了两个解决方案 在方法1中,所有逻辑都放在一个对时钟和复位敏感的进程中。 在Spartan-3A上,它使用四个片、七个FFs和四个输入LUT 代码1 quadr_解码器的行为体系结构是 信号信道电流:标准逻辑; 信号信道前置:标准逻辑; 信号信道电流:标准逻辑; 信号信道前置:标准逻辑; 开始 过程(n_重置,clk_进入)开始 如果(n_reset='0'),则 --初始化内部信号 chan_a_curr您的代码版本2组合驱动输出,而代码版本1注册输出
chan_a_curr您的代码版本2组合驱动输出,而代码版本1注册输出:
- 计数evt
- 伯爵迪尔
- 错误(evt)
architecture Behavioral of quadr_decoder is
signal chan_a_curr : std_logic;
signal chan_a_prev : std_logic;
signal chan_b_curr : std_logic;
signal chan_b_prev : std_logic;
begin
process (n_reset, clk_in) begin
if (n_reset = '0') then
-- initialize internal signals
chan_a_curr <= '0';
chan_a_prev <= '0';
chan_b_curr <= '0';
chan_b_prev <= '0';
-- initialize outputs
count_evt <= '0';
count_dir <= '0';
error_evt <= '0';
elsif (clk_in'event and clk_in = '1') then
-- keep delayed inputs
chan_a_prev <= chan_a_curr;
chan_b_prev <= chan_b_curr;
-- read current inputs
chan_a_curr <= chan_a;
chan_b_curr <= chan_b;
-- detect a count event
count_evt <= ((chan_a_prev xor chan_a_curr) xor
(chan_b_prev xor chan_b_curr));
-- determine count direction
count_dir <= (chan_a_curr xor chan_b_prev xor
count_mode);
-- detect error conditions
error_evt <= ((chan_a_prev xor chan_a_curr) and
(chan_b_prev xor chan_b_curr));
end if;
end process;
end Behavioral;
architecture Behavioral of quadr_decoder is
signal chan_a_curr : std_logic;
signal chan_a_prev : std_logic;
signal chan_b_curr : std_logic;
signal chan_b_prev : std_logic;
begin
process (n_reset, clk_in) begin
if (n_reset = '0') then
-- initialize internal signals
chan_a_curr <= '0';
chan_a_prev <= '0';
chan_b_curr <= '0';
chan_b_prev <= '0';
elsif (clk_in'event and clk_in = '1') then
-- keep delayed inputs
chan_a_prev <= chan_a_curr;
chan_b_prev <= chan_b_curr;
-- read current inputs
chan_a_curr <= chan_a;
chan_b_curr <= chan_b;
end if;
end process;
process (chan_a_prev, chan_a_curr, chan_b_prev, chan_b_curr) begin
-- detect a count event
count_evt <= ((chan_a_prev xor chan_a_curr) xor
(chan_b_prev xor chan_b_curr));
-- determine count direction
count_dir <= (chan_a_curr xor chan_b_prev xor count_mode);
-- detect error conditions
error_evt <= ((chan_a_prev xor chan_a_curr) and
(chan_b_prev xor chan_b_curr));
end process;
end Behavioral;