vhdl语言里的cnt1:=(others=>‘1‘)是什么意思

本文介绍了VHDL中Others关键字的使用方法及其优势。通过一个具体的信号赋值示例,展示了如何利用Others实现对多位宽数据的统一初始化,并讨论了这种方式在位宽变化时的便利性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

来自:https://zhidao.baidu.com/question/34437388.html?qbl=relate_question_0&word=vhdl%20others

答复:

定义了一个多位宽数据cnt1:
singal cnt1: std_logic_vector(3 downto 0)
下面对他赋值:

cnt1 <= (others => '0');

表示的意思是
cnt1(3) <= '0';
cnt1(2) <= '0';
cnt1(1) <= '0';
cnt1(0) <= '0';

也可以写成
cnt1 <= "0000";

用OTHERS写法的好处是,不需要介意位宽,如果使用下面的方法,这样如果修改位宽为5位后,“0000”要改成“00000”,

而开始的写法则不用改。

library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.NUMERIC_STD.ALL; entity seg_595_dynamic is Port ( sys_clk : in std_logic; -- 系统时钟(如50MHz) sys_rst_n : in std_logic; -- 异步复位(低有效) seg_en : in std_logic; -- 数码管使能 sign : in std_logic; -- 符号位(显示'-') data : in std_logic_vector(19 downto 0); -- 待显示数据 point : in std_logic_vector(5 downto 0); -- 小数点位置 shcp : buffer std_logic; -- 595移位时钟 stcp : out std_logic; -- 595存储时钟 ds : out std_logic; -- 595串行数据 oe : out std_logic -- 595输出使能(低有效) ); end seg_595_dynamic; architecture Behavioral of seg_595_dynamic is -- 常量定义 constant DIGIT_NUM : integer := 6; -- 数码管位数 constant CLK_DIV_MAX : integer := 25000; -- 扫描时钟分频系数(50MHz→2kHz) -- 内部信号 signal clk_div_cnt : unsigned(15 downto 0) := (others => '0'); signal scan_clk : std_logic := '0'; signal digit_sel : unsigned(2 downto 0) := (others => '0'); signal digit_data : std_logic_vector(3 downto 0); signal digit_point : std_logic; signal seg_code : std_logic_vector(7 downto 0); signal shift_reg : std_logic_vector(7 downto 0) := (others => '0'); signal bit_cnt : unsigned(2 downto 0) := (others => '0'); signal stcp_pulse : std_logic := '0'; -- 数据缓存 type data_buffer_type is array (0 to DIGIT_NUM-1) of std_logic_vector(3 downto 0); signal data_buf : data_buffer_type := (others => (others => '0')); signal point_buf : std_logic_vector(5 downto 0) := (others => '0'); begin -- 分频器:生成扫描时钟(约2kHz,可根据需要调整) process(sys_clk, sys_rst_n) begin if sys_rst_n = '0' then clk_div_cnt <= (others => '0'); scan_clk <= '0'; elsif rising_edge(sys_clk) then if clk_div_cnt >= CLK_DIV_MAX then clk_div_cnt <= (others => '0'); scan_clk <= not scan_clk; else clk_div_cnt <= clk_div_cnt + 1; end if; end if; end process; -- 数码管位选控制 process(scan_clk, sys_rst_n) begin if sys_rst_n = '0' then digit_sel <= (others => '0'); elsif rising_edge(scan_clk) then if digit_sel >= DIGIT_NUM-1 then digit_sel <= (others => '0'); else digit_sel <= digit_sel + 1; end if; end if; end process; -- 数据缓存更新 process(sys_clk, sys_rst_n) begin if sys_rst_n = '0' then data_buf <= (others => (others => '0')); point_buf <= (others => '0'); elsif rising_edge(sys_clk) then if seg_en = '1' then -- 分解20位数据为6个4位数码管数据 data_buf(0) <= data(3 downto 0); data_buf(1) <= data(7 downto 4); data_buf(2) <= data(11 downto 8); data_buf(3) <= data(15 downto 12); data_buf(4) <= data(19 downto 16); -- 符号位处理(第5位显示'-') if sign = '1' then data_buf(5) <= "1010"; -- 负号编码 else data_buf(5) <= "0000"; -- 空白 end if; end if; end if; end process; -- 当前显示数据选择 digit_data <= data_buf(to_integer(digit_sel)); digit_point <= point_buf(to_integer(digit_sel)); -- 7段数码管编码(共阴数码管,低电平点亮) process(digit_data, digit_point) begin case digit_data is when "0000" => seg_code <= "11000000"; -- 0 when "0001" => seg_code <= "11111001"; -- 1 when "0010" => seg_code <= "10100100"; -- 2 when "0011" => seg_code <= "10110000"; -- 3 when "0100" => seg_code <= "10011001"; -- 4 when "0101" => seg_code <= "10010010"; -- 5 when "0110" => seg_code <= "10000010"; -- 6 when "0111" => seg_code <= "11111000"; -- 7 when "1000" => seg_code <= "10000000"; -- 8 when "1001" => seg_code <= "10010000"; -- 9 when "1010" => seg_code <= "10001000"; -- - (负号) when others => seg_code <= "11111111"; -- 灭 end case; -- 小数点控制(最高位) seg_code(7) <= digit_point; end process; -- 595控制:移位输出和锁存 process(sys_clk, sys_rst_n) begin if sys_rst_n = '0' then shift_reg <= (others => '0'); bit_cnt <= (others => '0'); shcp <= '0'; stcp <= '0'; ds <= '0'; stcp_pulse <= '0'; elsif rising_edge(sys_clk) then -- 生成移位时钟(约25MHz,50MHz二分频) shcp <= not shcp; if shcp = '1' then -- 上升沿 -- 位计数器控制 if bit_cnt >= 7 then bit_cnt <= (others => '0'); stcp_pulse <= '1'; -- 8位数据发送完成,准备锁存 else bit_cnt <= bit_cnt + 1; stcp_pulse <= '0'; end if; -- 移位输出 shift_reg <= shift_reg(6 downto 0) & '0'; ds <= shift_reg(7); -- 加载新数据 if bit_cnt = 7 then shift_reg <= seg_code; end if; end if; -- 生成存储时钟脉冲 stcp <= stcp_pulse; end if; end process; -- 输出使能控制 oe <= '0' when seg_en = '1' else '1'; -- 使能时输出,否则关闭 end Behavioral;烧录后开发板的数码管不能同时亮修改代码使其同时亮
最新发布
07-02
library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.NUMERIC_STD.ALL; entity test is Port ( clk_50MHz : in STD_LOGIC; reset : in STD_LOGIC; freq_up : in STD_LOGIC; duty_up : in STD_LOGIC; led1 : out STD_LOGIC; seg : out STD_LOGIC_VECTOR(6 downto 0); an : out STD_LOGIC_VECTOR(3 downto 0) ); end test; architecture Behavioral of test is constant CLK_FREQ : integer := 50_000_000; constant DEBOUNCE_MS : integer := 20; constant DEBOUNCE_TICKS : integer := (CLK_FREQ/1000)*DEBOUNCE_MS; -- 20ms计数值 signal freq_reg : integer range 1 to 200 := 1; -- 1-200 kHz signal duty_reg : integer range 0 to 100 := 50; -- 0-100% signal wave_reg : STD_LOGIC := '0'; -- 按键消抖状态机信号 type debounce_state is (IDLE, WAIT_STABLE); signal freq_state, duty_state : debounce_state := IDLE; signal freq_cnt, duty_cnt : integer range 0 to DEBOUNCE_TICKS-1 := 0; signal freq_stable, duty_stable : STD_LOGIC := '0'; signal freq_prev, duty_prev : STD_LOGIC := '0'; -- 边沿检测信号 signal freq_pulse, duty_pulse : STD_LOGIC := '0'; signal display_num : integer range 0 to 9999 := 0; signal refresh_cnt : integer range 0 to (CLK_FREQ/1000)-1 := 0; signal seg_sel : integer range 0 to 3 := 0; signal period_cnt : integer := 0; signal period_max : integer := CLK_FREQ/1000; -- 1kHz default signal digit : integer range 0 to 9 := 0; begin -- 频率按键消抖状态机 process(clk_50MHz) begin if rising_edge(clk_50MHz) then if reset = '1' then freq_state <= IDLE; freq_cnt <= 0; freq_stable <= '0'; else case freq_state is when IDLE => if freq_up /= freq_stable then freq_state <= WAIT_STABLE; freq_cnt <= 0; end if; when WAIT_STABLE => if freq_cnt < DEBOUNCE_TICKS-1 then freq_cnt <= freq_cnt + 1; else freq_stable <= freq_up; -- 更新稳定信号 freq_state <= IDLE; end if; end case; end if; end if; end process; -- 占空比按键消抖状态机 process(clk_50MHz) begin if rising_edge(clk_50MHz) then if reset = '1' then duty_state <= IDLE; duty_cnt <= 0; duty_stable <= '0'; else case duty_state is when IDLE => if duty_up /= duty_stable then duty_state <= WAIT_STABLE; duty_cnt <= 0; end if; when WAIT_STABLE => if duty_cnt < DEBOUNCE_TICKS-1 then duty_cnt <= duty_cnt + 1; else duty_stable <= duty_up; -- 更新稳定信号 duty_state <= IDLE; end if; end case; end if; end if; end process; -- 边沿检测电路 process(clk_50MHz) begin if rising_edge(clk_50MHz) then freq_prev <= freq_stable; duty_prev <= duty_stable; -- 检测上升沿 if (freq_stable = '1' and freq_prev = '0') then freq_pulse <= '1'; else freq_pulse <= '0'; end if; if (duty_stable = '1' and duty_prev = '0') then duty_pulse <= '1'; else duty_pulse <= '0'; end if; end if; end process; -- 频率和占空比控制 process(clk_50MHz) variable temp_period : integer; begin if rising_edge(clk_50MHz) then if reset = '1' then freq_reg <= 1; duty_reg <= 50; period_max <= CLK_FREQ/1000; -- 1kHz else -- 频率增加:检测单脉冲 if freq_pulse = '1' then if freq_reg >= 200 then freq_reg <= 1; else freq_reg <= freq_reg + 1; end if; -- 安全计算周期 if freq_reg > 0 then temp_period := CLK_FREQ / (freq_reg * 1000); -- 确保周期至少为1 if temp_period > 0 then period_max <= temp_period; else period_max <= 1; -- 最小周期值 end if; else period_max <= CLK_FREQ/1000; -- 默认1kHz end if; end if; -- 占空比增加:检测单脉冲(10%步进) if duty_pulse = '1' then if duty_reg >= 100 then -- 达到100%后回到10% duty_reg <= 10; else -- 确保不超过100% if (duty_reg + 10) > 100 then duty_reg <= 100; else duty_reg <= duty_reg + 10; end if; end if; end if; display_num <= freq_reg; -- 显示当前频率(kHz) end if; end if; end process; -- PWM生成(增强保护) process(clk_50MHz) variable threshold : integer; begin if rising_edge(clk_50MHz) then -- 双重保护:确保period_max有效 if period_max > 0 then -- 防止除以零错误 threshold := (period_max * duty_reg) / 100; -- 计数器逻辑 if period_cnt < period_max-1 then period_cnt <= period_cnt + 1; else period_cnt <= 0; end if; -- PWM输出 if period_cnt < threshold then wave_reg <= '1'; else wave_reg <= '0'; end if; else -- 无效period_max时的安全处理 wave_reg <= '0'; period_cnt <= 0; end if; end if; end process; led1 <= wave_reg; -- 7段数码管显示 process(clk_50MHz) begin if rising_edge(clk_50MHz) then if refresh_cnt < (CLK_FREQ/1000)-1 then refresh_cnt <= refresh_cnt + 1; else refresh_cnt <= 0; seg_sel <= seg_sel + 1; if seg_sel = 3 then seg_sel <= 0; end if; end if; -- 使用单独的case语句处理每个分支 case seg_sel is when 0 => an <= "1110"; digit <= display_num mod 10; when 1 => an <= "1101"; digit <= (display_num / 10) mod 10; when 2 => an <= "1011"; digit <= (display_num / 100) mod 10; when 3 => an <= "0111"; digit <= display_num / 1000; end case; -- 单独处理段选信号 case digit is when 0 => seg <= "1000000"; when 1 => seg <= "1111001"; when 2 => seg <= "0100100"; when 3 => seg <= "0110000"; when 4 => seg <= "0011001"; when 5 => seg <= "0010010"; when 6 => seg <= "0000010"; when 7 => seg <= "1111000"; when 8 => seg <= "0000000"; when 9 => seg <= "0010000"; when others => seg <= "1111111"; end case; end if; end process; end Behavioral;要在显示屏上显示正在输出的频率
06-28
library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.NUMERIC_STD.ALL; entity JFXT is Port ( clk : in STD_LOGIC; -- 50MHz系统时钟 k3 rst : in STD_LOGIC; -- 复位信号(高有效) k4 team_sel : in STD_LOGIC; -- 队伍选择(0=A队,1=B队) s7 btn_1 : in STD_LOGIC; -- 加1分按钮(低有效) k0 btn_2 : in STD_LOGIC; -- 加2分按钮(低有效) k1 btn_3 : in STD_LOGIC; -- 加3分按钮(低有效) k2 seg_out : out STD_LOGIC_VECTOR(6 downto 0); -- 数码管段选(a~g) an_out : out STD_LOGIC_VECTOR(3 downto 0) -- 数码管位选(4位,低有效) ); end JFXT; architecture Behavioral of JFXT is -- 得分寄存器(0-99分) signal score_A, score_B : integer range 0 to 99 := 0; -- 按键消抖脉冲(高电平有效) signal btn_1_pulse, btn_2_pulse, btn_3_pulse : STD_LOGIC := '0'; -- 数码管扫描信号 signal scan_cnt : integer range 0 to 3 := 0; -- 扫描位计数器(0-3) signal clk_1kHz : STD_LOGIC := '0'; -- 1kHz扫描时钟 signal digit_val : STD_LOGIC_VECTOR(3 downto 0); -- 当前显示数字(0-9) -- 常量定义 constant SCAN_DIV : integer := 25000; -- 50MHz→1kHz分频系数(50000/2) constant DEBOUNCE_CNT : integer := 00000; -- 10ms消抖计数(50MHz时钟) begin --------------------------- -- 1. 时钟分频模块(50MHz→1kHz) --------------------------- clk_divider: process(clk) variable cnt : integer range 0 to SCAN_DIV := 0; begin if rising_edge(clk) then if cnt = SCAN_DIV-1 then cnt := 0; clk_1kHz <= not clk_1kHz; else cnt := cnt + 1; end if; end if; end process; --------------------------- -- 2. 按键消抖模块(独立计数器) --------------------------- debounce: process(clk, rst) type debounce_state is (IDLE, DEBOUNCE, PULSE, WAIT_RELEASE); type btn_info is record state : debounce_state; counter : integer range 0 to DEBOUNCE_CNT; end record; variable btn1 : btn_info := (IDLE, 0); variable btn2 : btn_info := (IDLE, 0); variable btn3 : btn_info := (IDLE, 0); begin if rst = '1' then btn1 := (IDLE, 0); btn2 := (IDLE, 0); btn3 := (IDLE, 0); btn_1_pulse <= '0'; btn_2_pulse <= '0'; btn_3_pulse <= '0'; elsif rising_edge(clk) then -- 按钮1处理 case btn1.state is when IDLE => btn_1_pulse <= '0'; -- 确保脉冲被清除 if btn_1 = '0' then btn1.state := DEBOUNCE; btn1.counter := 0; -- 重置计数器 end if; when DEBOUNCE => if btn_1 = '1' then -- 按键提前释放 btn1.state := IDLE; elsif btn1.counter = DEBOUNCE_CNT then btn_1_pulse <= '1'; btn1.state := PULSE; else btn1.counter := btn1.counter + 1; end if; when PULSE => btn_1_pulse <= '0'; btn1.state := WAIT_RELEASE; when WAIT_RELEASE => if btn_1 = '1' then btn1.state := IDLE; end if; end case; -- 按钮2处理(结构同按钮1) case btn2.state is when IDLE => btn_2_pulse <= '0'; if btn_2 = '0' then btn2.state := DEBOUNCE; btn2.counter := 0; end if; when DEBOUNCE => if btn_2 = '1' then btn2.state := IDLE; elsif btn2.counter = DEBOUNCE_CNT then btn_2_pulse <= '1'; btn2.state := PULSE; else btn2.counter := btn2.counter + 1; end if; when PULSE => btn_2_pulse <= '0'; btn2.state := WAIT_RELEASE; when WAIT_RELEASE => if btn_2 = '1' then btn2.state := IDLE; end if; end case; -- 按钮3处理(结构同按钮1) case btn3.state is when IDLE => btn_3_pulse <= '0'; if btn_3 = '0' then btn3.state := DEBOUNCE; btn3.counter := 0; end if; when DEBOUNCE => if btn_3 = '1' then btn3.state := IDLE; elsif btn3.counter = DEBOUNCE_CNT then btn_3_pulse <= '1'; btn3.state := PULSE; else btn3.counter := btn3.counter + 1; end if; when PULSE => btn_3_pulse <= '0'; btn3.state := WAIT_RELEASE; when WAIT_RELEASE => if btn_3 = '1' then btn3.state := IDLE; end if; end case; end if; end process; --------------------------- -- 3. 得分更新模块 --------------------------- score_update: process(clk, rst) begin if rst = '1' then score_A <= 0; score_B <= 0; elsif rising_edge(clk) then -- A队得分更新 if team_sel = '0' then if btn_1_pulse = '1' and score_A < 99 then score_A <= score_A + 1; elsif btn_2_pulse = '1' and score_A < 98 then score_A <= score_A + 2; elsif btn_3_pulse = '1' and score_A < 97 then score_A <= score_A + 3; end if; -- B队得分更新 else if btn_1_pulse = '1' and score_B < 99 then score_B <= score_B + 1; elsif btn_2_pulse = '1' and score_B < 98 then score_B <= score_B + 2; elsif btn_3_pulse = '1' and score_B < 97 then score_B <= score_B + 3; end if; end if; end if; end process score_update; --------------------------- -- 4. 数码管扫描模块 --------------------------- display_scan: process(clk_1kHz) begin if rising_edge(clk_1kHz) then scan_cnt <= (scan_cnt + 1) mod 4; -- 循环扫描0-3位 case scan_cnt is when 0 => -- A队十位(第1位数码管) an_out <= "1110"; -- 位选:仅第1位有效(低电平) digit_val <= std_logic_vector(to_unsigned(score_A / 10, 4)); when 1 => -- A队个位(第2位数码管) an_out <= "1101"; digit_val <= std_logic_vector(to_unsigned(score_A mod 10, 4)); when 2 => -- B队十位(第3位数码管) an_out <= "1011"; digit_val <= std_logic_vector(to_unsigned(score_B / 10, 4)); when 3 => -- B队个位(第4位数码管) an_out <= "0111"; digit_val <= std_logic_vector(to_unsigned(score_B mod 10, 4)); when others => null; end case; end if; end process display_scan; --------------------------- -- 5. 七段译码模块(共阴数码管) --------------------------- seg_decoder: process(digit_val) begin case digit_val is when "0000" => seg_out <= "0111111"; -- 0(a~g段:0亮1灭) when "0001" => seg_out <= "0000110"; -- 1 when "0010" => seg_out <= "1011011"; -- 2 when "0011" => seg_out <= "1011111"; -- 3 when "0100" => seg_out <= "1100110"; -- 4 when "0101" => seg_out <= "1101101"; -- 5 when "0110" => seg_out <= "1111101"; -- 6 when "0111" => seg_out <= "0000111"; -- 7 when "1000" => seg_out <= "1111111"; -- 8 when "1001" => seg_out <= "1101111"; -- 9 when others => seg_out <= "0000000"; -- 灭灯 end case; end process seg_decoder; end Behavioral;为什么下载到开发板一直是初始状态,按什么都没反应
06-10
library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.NUMERIC_STD.ALL; entity test is Port ( clk_50MHz : in STD_LOGIC; reset : in STD_LOGIC; freq_up : in STD_LOGIC; duty_up : in STD_LOGIC; led1 : out STD_LOGIC; seg : out STD_LOGIC_VECTOR(6 downto 0); an : out STD_LOGIC_VECTOR(3 downto 0) ); end test; architecture Behavioral of test is constant CLK_FREQ : integer := 50_000_000; constant DEBOUNCE_MS : integer := 20; signal freq_reg : integer range 1 to 200 := 1; -- 1-200 kHz signal duty_reg : integer range 0 to 100 := 50; -- 0-100% signal wave_reg : STD_LOGIC := '0'; signal freq_up_db : STD_LOGIC := '0'; signal duty_up_db : STD_LOGIC := '0'; signal debounce_cnt : integer range 0 to (CLK_FREQ/1000*DEBOUNCE_MS)-1 := 0; signal freq_up_db_prev : STD_LOGIC := '0'; -- 消抖后信号的延迟 signal duty_up_db_prev : STD_LOGIC := '0'; -- 消抖后信号的延迟 signal display_num : integer range 0 to 9999 := 0; signal refresh_cnt : integer range 0 to (CLK_FREQ/1000)-1 := 0; signal seg_sel : integer range 0 to 3 := 0; signal period_cnt : integer := 0; signal period_max : integer := CLK_FREQ/1000; -- 1kHz default -- 新增:占空比步进计数器(防止按键按下时间过长导致多次增加) signal duty_step_cnt : integer range 0 to 15 := 0; begin -- 按键消抖 process(clk_50MHz) begin if rising_edge(clk_50MHz) then -- 存储消抖信号用于边沿检测 freq_up_db_prev <= freq_up_db; duty_up_db_prev <= duty_up_db; -- 原始信号延迟 if (freq_up_db /= freq_up) or (duty_up_db /= duty_up) then debounce_cnt <= 0; elsif debounce_cnt < (CLK_FREQ/1000*DEBOUNCE_MS)-1 then debounce_cnt <= debounce_cnt + 1; else -- 更新消抖后的稳定信号 freq_up_db <= freq_up; duty_up_db <= duty_up; end if; end if; end process; -- 频率和占空比控制 process(clk_50MHz) begin if rising_edge(clk_50MHz) then if reset = '1' then freq_reg <= 1; duty_reg <= 50; period_max <= CLK_FREQ/1000; -- 1kHz duty_step_cnt <= 0; -- 重置步进计数器 else -- 频率增加:检测消抖后信号的上升沿 if freq_up_db_prev = '0' and freq_up_db = '1' then if freq_reg >= 200 then freq_reg <= 1; else freq_reg <= freq_reg + 1; end if; period_max <= CLK_FREQ / (freq_reg * 1000); -- 修正计算 end if; -- 占空比增加:检测消抖后信号的上升沿(10%步进) if duty_up_db_prev = '0' and duty_up_db = '1' then -- 使用步进计数器确保每次按键只增加一次 if duty_step_cnt = 0 then if duty_reg >= 90 then duty_reg <= 0; else duty_reg <= duty_reg + 10; -- 改为10%步进 end if; duty_step_cnt <= 1; -- 标记已处理 end if; elsif duty_up_db = '0' then -- 按键释放时重置步进计数器 duty_step_cnt <= 0; end if; display_num <= freq_reg; -- 显示当前频率(kHz) end if; end if; end process; -- PWM生成 process(clk_50MHz) variable threshold : integer; begin if rising_edge(clk_50MHz) then -- 防止除以零错误 if period_max = 0 then threshold := 0; else threshold := (period_max * duty_reg) / 100; end if; if period_cnt < period_max-1 then period_cnt <= period_cnt + 1; else period_cnt <= 0; end if; if period_cnt < threshold then wave_reg <= '1'; else wave_reg <= '0'; end if; end if; end process; led1 <= wave_reg; -- 7段数码管显示 process(clk_50MHz) variable digit : integer range 0 to 9; begin if rising_edge(clk_50MHz) then if refresh_cnt < (CLK_FREQ/1000)-1 then refresh_cnt <= refresh_cnt + 1; else refresh_cnt <= 0; seg_sel <= seg_sel + 1; if seg_sel = 3 then seg_sel <= 0; end if; end if; case seg_sel is when 0 => an <= "1110"; digit := display_num mod 10; when 1 => an <= "1101"; digit := (display_num / 10) mod 10; when 2 => an <= "1011"; digit := (display_num / 100) mod 10; when 3 => an <= "0111"; digit := display_num / 1000; end case; case digit is when 0 => seg <= "1000000"; when 1 => seg <= "1111001"; when 2 => seg <= "0100100"; when 3 => seg <= "0110000"; when 4 => seg <= "0011001"; when 5 => seg <= "0010010"; when 6 => seg <= "0000010"; when 7 => seg <= "1111000"; when 8 => seg <= "0000000"; when 9 => seg <= "0010000"; when others => seg <= "1111111"; end case; end if; end process; end Behavioral;为什么这个代码按键2没反应,按键3要按很多下才会有几次有反应
06-28
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值