📄 pwm_m.vhd
字号:
--/*****************************************************************************
-- * 源文件: pwm_m.v
-- * 模块: PWM信号分析测量
-- * 版权:
-- * Copyright(C) 北京联华众科科技有限公司
-- * www.lianhua-zhongke.com.cn
-- * 版本: Version 1.0
-- *
-- * 功能说明:
-- * 通过对PWM信号的高电平,低电平计数得到PWM信号的正,负半周期宽度,
-- * 计数结果的低8位通过输出变量 data 输出,显示在 8 位LED上。
-- *
-- * 参数说明:
-- * 输出
-- * data - PWM信号测量结果,是一个计数值,可能是正半周期宽度,也可能
-- * 是负半周期,由输入的选择开关 data_sel 控制。
-- *
-- * 输入
-- * data_sel - 测量结果输出选择,0表示输出为低电平宽度,1表示输出为
-- * 高电平宽度
-- * pwm_in - 待测量的PWM信号
-- * clock - 工作时钟
-- * reset - 复位信号,低电平有效
-- *
-- * 参数
-- * 无
-- *
-- * 变更记录:
-- * 2006.01.28, 新建
-- *
-- *****************************************************************************/
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;
USE ieee.std_logic_unsigned.all;
ENTITY pwm_m IS
PORT
(
data : OUT STD_LOGIC_VECTOR(7 downto 0);
data_sel : IN STD_LOGIC;--显示测量结果选择,0-为TL, 1-为TH
pwm_in : IN STD_LOGIC;--待测量的PWM信号
clock : IN STD_LOGIC;
reset : IN STD_LOGIC
);
END pwm_m;
ARCHITECTURE pwm_m_architecture OF pwm_m IS
BEGIN
PROCESS(clock, pwm_in, data_sel, reset)
VARIABLE TL_counter : INTEGER RANGE 0 TO 16777215;--负半周期宽度,24位宽
VARIABLE TH_counter : INTEGER RANGE 0 TO 16777215;--正半周期宽度,24位宽
VARIABLE TL_value : STD_LOGIC_VECTOR(23 downto 0);--24位宽
VARIABLE TH_value : STD_LOGIC_VECTOR(23 downto 0);--24位宽
BEGIN
if(reset = '0') then--低电平复位
TL_counter := 0;
TH_counter := 0;
data <= X"00";
elsif (clock'EVENT and clock='1') then
--信号测量部分
if (pwm_in = '1') then
if (TH_counter = CONV_INTEGER(STD_LOGIC_VECTOR'(X"FFFFFF"))) then
--if (TH_counter = 16777215) then
TH_counter := 0;
else
TH_counter := TH_counter+1;
end if;
if (TL_counter = 0) then
else
TL_value := CONV_STD_LOGIC_VECTOR(TL_counter, 24);
TL_counter := 0;
end if;
else
if (TL_counter = CONV_INTEGER(STD_LOGIC_VECTOR'(X"FFFFFF"))) then
--if (TL_counter = 16777215) then
TL_counter := 0;
else
TL_counter := TL_counter+1;
end if;
if (TH_counter = 0) then
else
TH_value := CONV_STD_LOGIC_VECTOR(TH_counter, 24);
TH_counter := 0;
end if;
end if;
if (data_sel = '0') then
data <= NOT TH_value(7 downto 0);
else
data <= NOT TL_value(7 downto 0);
end if;
end if;
END PROCESS;
END pwm_m_architecture;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -