LIBRARY IEEE;--引用IEEE库\nUSE IEEE.STD_LOGIC_1164.ALL;--该程序包包含数据格式STD_LOGIC及STD_LOGIC_VECTOR及它们之间的转换函数及算术、逻辑运算。\nUSE IEEE.STD_LOGIC_UNSIGNED.ALL;--该程序包定义了可用于integer数据类型和std_logic及std_logic_vector数据类型混合运算的运算符;\n--并定义了由无符号数unsigned、有符号数signed与std_logic_vector数据类型之间的转换函数,std_logic_vector数据类型与integer数据类型之间的转换函数。\n\nLIBRARY IEEE;--引用库\nUSE IEEE.STD_LOGIC_1164.ALL;--STD_LOGIC、STD_LOGIC_VECTOR数据类型在此程序包中,而且程序包\n--还包含此两种数据类型的逻辑运算。且IEEE库不属于VHDL标准库,必须予以声明\nUSE IEEE.STD_LOGIC_UNSIGNED.ALL;--对STD_LOGIC_VECTOR数据类型进行无符号数运算需声明UNSIGNED,\n--如需进行有符号数运算,则需声明SIGNED\n\nENTITY STATECONTROL IS--该模块输入信号为手动输入的加1计数脉冲信号、时钟秒进位信号、时钟分钟进位信号\nPORT(--和状态控制器产生的信号;输出信号为闹钟分钟和小时的计数脉冲、时钟分钟和小时的计数脉冲\n\t\t\t\tACLK,CLK_MIAO,CLK_FEN: IN STD_LOGIC;\n\t\t\t\t\t\t\t\tSTATE_R: IN STD_LOGIC_VECTOR(2 DOWNTO 0);\n\t\t\t\t\t\tMBHCLK,MBFCLK:OUT STD_LOGIC;\n\t\t\t\t\t\tFEN_RCLK,SHI_RCLK:OUT STD_LOGIC);\n END ENTITY STATECONTROL;\n\n ARCHITECTURE RTL OF STATECONTROL IS\n\n BEGIN\n\tPROCESS(STATE_R)--进程,根据输入的状态控制器的状态,控制各输出信号具体是什么信号\n\tBEGIN\n\t\tIF(STATE_R="000")THEN--当状态为时钟正常显示状态\n\t\t\tFEN_RCLK<=CLK_MIAO;SHI_RCLK<=CLK_FEN;MBHCLK<='0';MBFCLK<='0';\n--时钟分钟计数脉冲为秒进位信号,时钟小时计数脉冲为分钟进位信号,闹钟小时和分钟计数脉冲为0\n\t\tELSIF(STATE_R="001")THEN--当状态为调整时钟分钟状态时\n\t\t\tFEN_RCLK<=CLK_MIAO OR ACLK;SHI_RCLK<=CLK_FEN;MBHCLK<='0';MBFCLK<='0';\n--时钟分钟计数脉冲为秒进位信号和手动输入的加1计数脉冲信号相或的结果,时钟小时计数脉冲为分钟进位信号,\n--闹钟小时和分钟计数脉冲为0\n\t\tELSIF(STATE_R="010")THEN--当状态为调整时钟小时状态时\n\t\t\tFEN_RCLK<=CLK_MIAO;SHI_RCLK<=CLK_FEN OR ACLK;MBHCLK<='0';MBFCLK<='0';\n--时钟分钟计数脉冲为秒进位信号,时钟小时计数脉冲为分钟进位信号和手动输入的加1计数脉冲信号相或的结果,\n--闹钟小时和分钟计数脉冲为0\n\t\tELSIF(STATE_R="011")THEN--当状态为调整闹钟分钟状态时\n\t\t\tFEN_RCLK<=CLK_MIAO;SHI_RCLK<=CLK_FEN;MBHCLK<='0';MBFCLK<=ACLK;\n--时钟分钟计数脉冲为秒进位信号,时钟小时计数脉冲为分钟进位信号,闹钟分钟的计数脉冲为手动输入的加1计数脉冲,\n--闹钟小时计数脉冲为0\n\t\tELSIF(STATE_R="100")THEN--当状态为调整闹钟小时状态时\n\t\t\tFEN_RCLK<=CLK_MIAO;SHI_RCLK<=CLK_FEN;MBHCLK<=ACLK;MBFCLK<='0';\n--时钟分钟计数脉冲为秒进位信号,时钟小时计数脉冲为分钟进位信号,闹钟小时的计数脉冲为手动输入的加1计数脉冲,\n--闹钟分钟计数脉冲为0\n\t\tELSE--其余状态即000,101时\n\t\t\tFEN_RCLK<=CLK_MIAO;SHI_RCLK<=CLK_FEN;MBHCLK<='0';MBFCLK<='0';\n--时钟分钟计数脉冲为秒进位信号,时钟小时计数脉冲为分钟进位信号,闹钟小时和分钟计数脉冲为0\n\t\tEND IF;\n\tEND PROCESS;\nEND ARCHITECTURE RTL;\n将VHDL转换为verilog内容:module STATECONTROL (\n ACLK, CLK_MIAO, CLK_FEN, STATE_R, MBHCLK, MBFCLK, FEN_RCLK, SHI_RCLK\n);\ninput ACLK, CLK_MIAO, CLK_FEN;\ninput [2:0] STATE_R;\noutput MBHCLK, MBFCLK, FEN_RCLK, SHI_RCLK;\n\nreg FEN_RCLK, SHI_RCLK, MBHCLK, MBFCLK;\n\nalways @(STATE_R)\nbegin\n if (STATE_R == 3'b000) begin\n FEN_RCLK <= CLK_MIAO;\n SHI_RCLK <= CLK_FEN;\n MBHCLK <= 1'b0;\n MBFCLK <= 1'b0;\n end\n else if (STATE_R == 3'b001) begin\n FEN_RCLK <= CLK_MIAO | ACLK;\n SHI_RCLK <= CLK_FEN;\n MBHCLK <= 1'b0;\n MBFCLK <= 1'b0;\n end\n else if (STATE_R == 3'b010) begin\n FEN_RCLK <= CLK_MIAO;\n SHI_RCLK <= CLK_FEN | ACLK;\n MBHCLK <= 1'b0;\n MBFCLK <= 1'b0;\n end\n else if (STATE_R == 3'b011) begin\n FEN_RCLK <= CLK_MIAO;\n SHI_RCLK <= CLK_FEN;\n MBHCLK <= ACLK;\n MBFCLK <= 1'b0;\n end\n else if (STATE_R == 3'b100) begin\n FEN_RCLK <= CLK_MIAO;\n SHI_RCLK <= CLK_FEN;\n MBHCLK <= 1'b0;\n MBFCLK <= ACLK;\n end\n else begin\n FEN_RCLK <= CLK_MIAO;\n SHI_RCLK <= CLK_FEN;\n MBHCLK <= 1'b0;\n MBFCLK <= 1'b0;\n end\nend\n\nendmodule

VHDL 状态控制器模块:时钟和闹钟控制

原文地址: https://www.cveoy.top/t/topic/pAza 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录