{ "title": "LIBRARY IEEE;--引用IEEE库\nUSE IEEE.STD_LOGIC_1164.ALL;--STD_LOGIC、STD_LOGIC_VECTOR数据类型在此程序包中,而且程序包\n--还包含此两种数据类型的逻辑运算。且IEEE库不属于VHDL标准库,必须予以声明\nUSE IEEE.STD_LOGIC_ARITH.ALL;--对STD_LOGIC类型的数据进行算术运算的程序包\nUSE IEEE.STD_LOGIC_UNSIGNED.ALL;--对STD_LOGIC_VECTOR数据类型进行无符号数运算需声明UNSIGNED,\n--如需进行有符号数运算,则需声明SIGNED\n\nENTITY COUNTER_60 IS\nPORT(\n\t\tCLK_1HZ,CLR: IN STD_LOGIC;--输入的计数脉冲\n\t SHIWEI,GEWEI:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--输出个位及十位BCD码\n\t\t\t\t ACC:OUT STD_LOGIC);--60进制计数器输出的进位信号,可作为高位计数器计数脉冲\nEND ENTITY COUNTER_60;\n\nARCHITECTURE RTL OF COUNTER_60 IS\nSIGNAL TMP2,TMP1:STD_LOGIC_VECTOR(3 DOWNTO 0);--引入信号TMP1、TMP2,存储计数器计数结果\nSIGNAL CO:STD_LOGIC;--引入信号CO,用来存储计数器的进位信号\nBEGIN\n\tPROCESS(CLK_1HZ)\n\tBEGIN\n\t\tIF(CLR='0')THEN--当清零控制管脚为低电平时,将中间信号量TMP1、TMP2置零处理\n\t\t\tTMP1<="0000";TMP2<="0000";\n\t\tELSIF(CLK_1HZ'EVENT AND CLK_1HZ='1')THEN--当清零控制管脚为高电平时,判断输入计数脉冲有无上升沿到来\n\t\t\tIF(TMP1="1001")THEN--输入计数脉冲有上升沿到来,且计数结果个位数为9\n\t\t\t\tIF(TMP2="0101")THEN--输入计数脉冲有上升沿到来,且计数结果十位数为5\n\t\t\t\t\tTMP1<="0000";TMP2<="0000";CO<='1';--输出结果清零,进位信号输出高电平\n\t\t\t\tELSE\n\t\t\t\t\tTMP1<="0000";TMP2<=TMP2+1;CO<='0';--输入计数脉冲有上升沿到来,计数结果十位数不为5\n\t\t\t\tEND IF;--个位数清零,十位数实现加1\n\t\t\tELSE\n\t\t\t\tTMP1<=TMP1+1;CO<='0';--输入计数脉冲有上升沿到来,计数结果个位数不为9,则个位数实现加1\n\t\t\tEND IF;\n\t\tEND IF;\n\tEND PROCESS;\n\tACC<=CO;GEWEI<=TMP1;SHIWEI<=TMP2;--将计数器结果赋值给输出的个位和十位,信号CO赋值给输出进位\nEND ARCHITECTURE RTL;\n将VHDR转换为verilog内容:以下是将VHDL代码转换为Verilog代码的结果:\n\nverilog\n`include "IEEE/std_logic_1164.vh"\n`include "IEEE/std_logic_arith.vh"\n`include "IEEE/std_logic_unsigned.vh"\n\nmodule COUNTER_60(\n\tCLK_1HZ,\n\tCLR,\n\tSHIWEI,\n\tGEWEI,\n\tACC\n);\n\ninput CLK_1HZ;\ninput CLR;\noutput [3:0] SHIWEI;\noutput [3:0] GEWEI;\noutput ACC;\n\nreg [3:0] TMP2;\nreg [3:0] TMP1;\nreg CO;\n\nalways @(posedge CLK_1HZ) begin\n\tif (CLR == 0) begin\n\t\tTMP1 <= 4'b0000;\n\t\tTMP2 <= 4'b0000;\n\tend else if (CLK_1HZ) begin\n\t\tif (TMP1 == 4'b1001) begin\n\t\t\tif (TMP2 == 4'b0101) begin\n\t\t\t\tTMP1 <= 4'b0000;\n\t\t\t\tTMP2 <= 4'b0000;\n\t\t\t\tCO <= 1'b1;\n\t\t\tend else begin\n\t\t\t\tTMP1 <= 4'b0000;\n\t\t\t\tTMP2 <= TMP2 + 1;\n\t\t\t\tCO <= 1'b0;\n\t\t\tend\n\t\tend else begin\n\t\t\tTMP1 <= TMP1 + 1;\n\t\t\tCO <= 1'b0;\n\t\tend\n\tend\nend\n\nassign ACC = CO;\nassign GEWEI = TMP1;\nassign SHIWEI = TMP2;\n\nendmodule\n

60进制计数器VHDL代码及Verilog转换 - 基于IEEE库的实现

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

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