FPGA中,用Verilog实现的程序,求大神帮忙分析一下程序

使用带有异步清零端的D触发器(在清零端变为高电平后立即执行清零操作,无须等待下一个时钟下降沿)设计带有同步清零端的D触发器(清零端高电平有效,在时钟下降沿执行清零操作),... 使用带有异步清零端的D触发器(在清零端变为高电平后立即执行清零操作,无须等待下一个时钟下降沿)设计带有同步清零端的D触发器(清零端高电平有效,在时钟下降沿执行清零操作),输出为周期10个单位时间,并对这个D触发器进行测试。

请大神看一下,帮忙把程序每一行都分析一下,谢谢!本人初学,不懂。。特别是always后面!

module d_asyn(clk,clr,d,q);
input clk,clr,d;
output q;
reg q;
always @(posedge clr)
begin
q<=0;
end
always @(necedge clk)
begin
#10 q<=d;
end
endmodule
展开
 我来答
candy198921
2014-07-30 · 超过15用户采纳过TA的回答
知道答主
回答量:38
采纳率:0%
帮助的人:28.2万
展开全部
module d_asyn(clk,clr,d,q); //模块输入输出口,共四个信号,每个都是1bit的
input clk,clr,d; //这些是作为输入
output q; //这些是作为输出
reg q; //q在作为寄存器类的输出,就是说可以用<= 箭头赋值(见下面)
always @(posedge clr) //posedge:上升沿。就是说在clr信号的上升沿的时候都会触发这个操作
begin //可以忽略,就是多条语句在一块的时候要用
q<=0; //清0
end
always @(necedge clk) //negedge:下降沿,你肯定拼错了 ,在clk下降沿的时候触发
begin
#10 q<=d; //延迟10个单位,这个在#timescale那里定义,这个只在仿真的时候有用,在器件上的时候不能这样做延迟
end
endmodule
追问
帮忙分析一下 q<=d是怎么执行的?一开始q为多少?执行完一遍后为多少?两个always不能一块用吧?怎么改啊,大神
追答
<= 就相当于一个D触发器。当条件满足的时候,右边的值被赋左边的值。
比如这里,当clk信号来上升沿的时候,d的值就给了q

可以有多个always语句

建议看看Verilog HDL基本语法方面的书,看了就懂了
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式