LIBRARY\u0020IEEE;--引用IEEE库\nUSE\u0020IEEE.STD_LOGIC_1164.ALL;--该程序包包含STD_LOGIC数据类型\nUSE\u0020IEEE.STD_LOGIC_ARITH.ALL;--该程序包包含STD_LOGIC数据类型的各种运算函数\nUSE\u0020IEEE.STD_LOGIC_UNSIGNED.ALL;--该程序包包含无符号数数据类型\n\nENTITY\u0020STATESETUP\u0020IS--实体描述,一个输入的设置按键,6种输出状态用3个输出端来表示\nPORT(\n\t\t\tCLK_STATE,CLR:\u0020IN\u0020STD_LOGIC;\n\t\t\t\t\t\tSOUT:OUT\u0020STD_LOGIC_VECTOR(2\u0020DOWNTO\u00200));\nEND\u0020ENTITY\u0020STATESETUP;\n\nARCHITECTURE\u0020A\u0020OF\u0020STATESETUP\u0020IS--结构体描述,用一六进制计数器得到6种状态\nSIGNAL\u0020TMP:STD_LOGIC_VECTOR(2\u0020DOWNTO\u00200);\nBEGIN\n\tPROCESS(CLK_STATE)--根据按键按下的次数描述进程\n\tBEGIN\n\t\tIF(CLR='0')THEN--当清零控制端为低电平时,将输出实现置零处理\n\t\t\tTMP<="000";\n\t\tELSIF(CLK_STATE'EVENT\u0020AND\u0020CLK_STATE='1')THEN--当清零控制端为高电平时,根据按键按下状态得到上升沿\n\t\t\tIF(TMP="101")THEN--当计数结果计到5,且时钟信号有上升沿到时\n\t\t\t\tTMP<="000";--计数结果清零\n\t\t\tELSE--当计数结果未计到5,且时钟信号有上升沿到时\n\t\t\t\tTMP<=TMP+1;--计数结果加1\n\t\t\tEND\u0020IF;--IF语句结束语句\n\t\tEND\u0020IF;--IF语句结束语句\n\tEND\u0020PROCESS;--进程描述结束语句\n\tSOUT<=TMP;--将中间信号量赋值给输出\nEND\u0020ARCHITECTURE\u0020A;--结构体描述结束语句\n将VHDL转换为verilog HDL内容:下面是将上述VHDL代码转换为Verilog HDL的代码:\n\nverilog\nmodule\u0020STATESETUP(\n\tinput\u0020wire\u0020CLK_STATE,\n\tinput\u0020wire\u0020CLR,\n\toutput\u0020wire\u0020[2:0]\u0020SOUT\n\t);\n\nreg\u0020[2:0]\u0020TMP;\n\nalways\u0020@(posedge\u0020CLK_STATE)\u0020begin\n\tif\u0020(CLR\u0020==\u00200)\u0020begin\n\t\tTMP\u0020<=\u00203'b000;\n\t\tend\u0020else\u0020begin\n\t\tif\u0020(TMP\u0020==\u00203'b101)\u0020begin\n\t\t\tTMP\u0020<=\u00203'b000;\n\t\tend\u0020else\u0020begin\n\t\t\tTMP\u0020<=\u0020TMP\u0020+\u00201;\n\t\tend\n\tend\nend\n\nassign\u0020SOUT\u0020=\u0020TMP;\n\nendmodule\n\n\n注意,Verilog HDL中的信号类型是使用wirereg来声明的。always @(posedge CLK_STATE)表示在时钟上升沿触发的always块。<=表示非阻塞赋值,+表示加法运算。assign语句用于连续赋值,将TMP赋值给SOUT

VHDL 状态机设计:使用计数器实现 6 种状态

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

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