输入是一个大部分是高电平的信号,只有一小部分是低电平的一个信号,即负脉冲。输出的信号为半宽度的负脉 15

输出信号和输入相似,只是负脉冲的宽度是输入的一半,用VHDL实现... 输出信号和输入相似,只是负脉冲的宽度是输入的一半,用VHDL实现 展开
 我来答
tanbaohai
2011-02-26
知道答主
回答量:13
采纳率:0%
帮助的人:5万
展开全部
可以,不过需要异步实现。就是说,你从输入脉冲正边沿开始计数,到下一个正边沿停止,然后开始输出正电平,到计数器一半计数位置,输出负脉冲。
追问
正边沿?在负脉冲前面都是正的,负脉冲后面全是正的,怎么会是从正边沿开始计数呢?你没看明白我的题目吧
追答
是上升沿。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
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;
更多追问追答
追问
你这个程序明显是错的
追答
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),另一个基本要求是要小于输入的负脉冲宽度
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式