LIBRARY IEEE; --打开IEEE库 USE IEEE.STD_LOGIC_1164.ALL; --程序中有STD_LOGIC和STD_LOGIC_VECTOR数据类型,这两种数据类型都在STD_LOGIC_1164 --程序包中定义。 USE IEEE.STD_LOGIC_UNSIGNED.ALL; --程序中有“+”运算符,无符号数的算术运算在STD_LOGIC_UNSIGNED程序包中定义。 ENTITY BAIFENPING IS PORT( CLR,CLK_SOURCE: IN STD_LOGIC; --输入端口,数据类型为STD_LOGIC。 CLK_TARGET:OUT STD_LOGIC); --输出端口,数据类型为STD_LOGIC。 END ENTITY BAIFENPING; ARCHITECTURE RTL OF BAIFENPING IS SIGNAL CNT:STD_LOGIC_VECTOR(5 DOWNTO 0); CONSTANT M:INTEGER:=49; --设置一控制计数器的常量,该值为(分频数/2)-1 SIGNAL TMP:STD_LOGIC; --引入信号TMP,用来存储反相器输出结果,即输出信号 BEGIN PROCESS(CLK_SOURCE) --进程,其敏感信号为输入的时钟信号 BEGIN IF (CLR='0') THEN --如清零信号为低电平,五十进制计数器清零,中间信号置低电平; CNT<="000000";TMP<='0'; ELSIF(CLK_SOURCE'EVENT AND CLK_SOURCE='1')THEN--判断输入时钟信号有无上升沿到来 IF(CNT=M)THEN --输入信号有上升沿到来,且计数结果为49 TMP<=NOT TMP;CNT<="000000";--信号TMP反相,计数器清零 ELSE --输入信号有上升沿到来,计数结果不为49 CNT<=CNT+1; --信号TMP保持,计数结果加1 END IF; END IF; --输入时钟信号无上升沿到来,计数结果保持,信号TMP保持 END PROCESS; CLK_TARGET<=TMP; --将信号TMP的值赋值给输出 END ARCHITECTURE RTL;转换成Verilog代码
时间: 2024-04-20 15:24:58 浏览: 300
PID.rar_PID控制IEEE文章_VHDL PID_logic_pid vhdl
module BAIFENPING (
input CLR,
input CLK_SOURCE,
output reg CLK_TARGET
);
reg [5:0] CNT;
parameter M = 49;
reg TMP;
always @(posedge CLK_SOURCE or negedge CLR) begin
if (CLR == 0) begin
CNT <= 6'b000000;
TMP <= 1'b0;
end else if (CLK_SOURCE) begin
if (CNT == M) begin
TMP <= ~TMP;
CNT <= 6'b000000;
end else begin
CNT <= CNT + 1;
end
end
end
assign CLK_TARGET = TMP;
endmodule
阅读全文