library ieee;use ieeestd_logic_1164all;use ieeestd_logic_arithall;use ieeestd_logic_unsignedall;ENTITY taxi is --配置实体 port clk_digital in std_logic; clk_run in std_logic; key_begin in std_log
这段代码是一个计程车的控制器,通过输入不同的按键控制计程车的状态和费用计算。下面是对代码的逐行解释:
-
library ieee;:引入了ieee标准库
-
use ieee.std_logic_1164.all;:使用标准库中的std_logic_1164类型
-
use ieee.std_logic_arith.all;:使用标准库中的std_logic_arith类型
-
use ieee.std_logic_unsigned.all;:使用标准库中的std_logic_unsigned类型
-
ENTITY taxi is:定义实体taxi
-
port:定义实体的输入输出端口
-
architecture cost of taxi is:定义结构体cost作为实体的结构
-
TYPE digital_ARRAY is array (7 downto 0) of std_logic_vector(7 downto 0);:定义digital_ARRAY类型,是一个8*8的二维数组
-
signal digitals : digital_ARRAY;:定义一个信号digitals,类型是digital_ARRAY
-
signal digital_index : integer range 0 to 7 := 0;:定义一个整数信号digital_index,范围是0到7,默认值是0
-
TYPE digital_codes is array (0 to 9) of std_logic_vector(7 downto 0);:定义digital_codes类型,是一个10*8的二维数组
-
signal digital_code : digital_codes;:定义一个信号digital_code,类型是digital_codes
-
signal digital_code_point : digital_codes;:定义一个信号digital_code_point,类型是digital_codes
-
signal flag : std_logic := '0';:定义一个标志位信号flag,默认值是0
-
signal state : integer range 0 to 1 := 0;:定义一个状态信号state,范围是0到1,默认值是0
-
signal km_0 : std_logic_vector(3 downto 0):= "0000";:定义一个公里数低位信号km_0,长度为4位,默认值是“0000”
-
signal km_1 : std_logic_vector(3 downto 0):= "0000";:定义一个公里数高位信号km_1,长度为4位,默认值是“0000”
-
signal free_0 : std_logic_vector(4 downto 0) :="00000";:定义一个费用低位信号free_0,长度为5位,默认值是“00000”
-
signal free_1 : std_logic_vector(4 downto 0) :="01000";:定义一个费用中间位信号free_1,长度为5位,默认值是“01000”
-
signal free_2 : std_logic_vector(4 downto 0) :="00000";:定义一个费用高位信号free_2,长度为5位,默认值是“00000”
-
signal flag_free : std_logic := '0';:定义一个标志位信号flag_free,默认值是0
-
signal wait_time_min : std_logic_vector(3 downto 0) := "0000";:定义一个等待时间分钟位信号wait_time_min,长度为4位,默认值是“0000”
-
signal wait_time_sec_0 : std_logic_vector(3 downto 0):= "0000";:定义一个等待时间秒数低位信号wait_time_sec_0,长度为4位,默认值是“0000”
-
signal wait_time_sec_1 : std_logic_vector(3 downto 0):= "0000";:定义一个等待时间秒数高位信号wait_time_sec_1,长度为4位,默认值是“0000”
-
signal counter_6 : integer range 0 to 6 :=0;:定义一个计数器信号counter_6,范围是0到6,默认值是0
-
digital_code(0) <= "11111100";:定义数字0在数码管上的显示方式
-
digital_code(1) <= "01100000";:定义数字1在数码管上的显示方式
-
digital_code(2) <= "11011010";:定义数字2在数码管上的显示方式
-
digital_code(3) <= "11110010";:定义数字3在数码管上的显示方式
-
digital_code(4) <= "01100110";:定义数字4在数码管上的显示方式
-
digital_code(5) <= "10110110";:定义数字5在数码管上的显示方式
-
digital_code(6) <= "10111110";:定义数字6在数码管上的显示方式
-
digital_code(7) <= "11100000";:定义数字7在数码管上的显示方式
-
digital_code(8) <= "11111110";:定义数字8在数码管上的显示方式
-
digital_code(9) <= "11110110";:定义数字9在数码管上的显示方式
-
digital_code_point(0) <= "11111101";:定义数字0在数码管上加小数点的显示方式
-
digital_code_point(1) <= "01100001";:定义数字1在数码管上加小数点的显示方式
-
digital_code_point(2) <= "11011011";:定义数字2在数码管上加小数点的显示方式
-
digital_code_point(3) <= "11110011";:定义数字3在数码管上加小数点的显示方式
-
digital_code_point(4) <= "01100111";:定义数字4在数码管上加小数点的显示方式
-
digital_code_point(5) <= "10110111";:定义数字5在数码管上加小数点的显示方式
-
digital_code_point(6) <= "10111111";:定义数字6在数码管上加小数点的显示方式
-
digital_code_point(7) <= "11100001";:定义数字7在数码管上加小数点的显示方式
-
digital_code_point(8) <= "11111111";:定义数字8在数码管上加小数点的显示方式
-
digital_code_point(9) <= "11110111";:定义数字9在数码管上加小数点的显示方式
-
digital_show:process(clk_digital):定义数字显示的过程
-
if clk_digital'event and clk_digital = '1' then:如果时钟上升沿发生且时钟为1
-
digital <= digitals(digital_index);:将digitals中digital_index指定的行赋值给digital
-
sel <= NOT ( conv_std_logic_vector(2**digital_index,8) );:构造一个位向量,选中当前数码管
-
if digital_index = 7 then:如果digital_index为7
-
digita
原文地址: https://www.cveoy.top/t/topic/hfiS 著作权归作者所有。请勿转载和采集!