输入是一个大部分是高电平的信号,只有一小部分是低电平的一个信号,即负脉冲。输出的信号为半宽度的负脉 15
2个回答
展开全部
可以,不过需要异步实现。就是说,你从输入脉冲正边沿开始计数,到下一个正边沿停止,然后开始输出正电平,到计数器一半计数位置,输出负脉冲。
追问
正边沿?在负脉冲前面都是正的,负脉冲后面全是正的,怎么会是从正边沿开始计数呢?你没看明白我的题目吧
追答
是上升沿。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2011-02-26
展开全部
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY www IS
PORT(
din:in std_logic;
dout:out std_logic
);
END ENTITY www;
ARCHITECTURE behave of www is
SIGNAL dtemp:std_logic;
BEGIN
PROCESS(din)
BEGIN
IF din='1' THEN
dtemp<=not dtemp;
END IF;
END PROCESS;
dout<=dtemp;
END ARCHITECTURE behave;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY www IS
PORT(
din:in std_logic;
dout:out std_logic
);
END ENTITY www;
ARCHITECTURE behave of www is
SIGNAL dtemp:std_logic;
BEGIN
PROCESS(din)
BEGIN
IF din='1' THEN
dtemp<=not dtemp;
END IF;
END PROCESS;
dout<=dtemp;
END ARCHITECTURE behave;
更多追问追答
追问
你这个程序明显是错的
追答
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY www IS
PORT(
din,clk:in std_logic;
dout:buffer std_logic
);
END ENTITY www;
ARCHITECTURE behave of www is
signal dtemp:std_logic;
BEGIN
PROCESS(clk)
variable count:integer range 0 to 400;
variable t:integer range 0 to 400;
variable ddd:std_logic;
BEGIN
IF rising_edge(clk) then
dtemp<=din;
if dtemp='0' and din='1' then
t:=count/2;
count:=0;
else
if count=t or count=0 then
ddd:=not ddd;
end if;
count:=count+1;
end if;
end if;
dout<=ddd;
END PROCESS;
END ARCHITECTURE behave;
clk是采样脉冲,它的周期相对din来说要相当的小才能准确(可以取它的确1/100),另一个基本要求是要小于输入的负脉冲宽度
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询