一小段Verilog HDL程序,帮忙!大侠!
时间:10-02
整理:3721RD
点击:
我是刚学的,对于Verilog HDL 不是很熟
下面这段程序是我刚写的,编译的时候没有错误
仿真的时候
HOLD_BEGIN总是为高。我想问问大侠们我这里是不是有什么语法错误
always能后面用3个边沿触发吗?
谢谢!小弟先谢过了!
reg HOLD_BEGIN;
always @(negedge HOLD_C or posedge DOWN_TIME or posedge RST)
begin
if (RST)HOLD_BEGIN=0;
else
HOLD_BEGIN=1;
end
下面这段程序是我刚写的,编译的时候没有错误
仿真的时候
HOLD_BEGIN总是为高。我想问问大侠们我这里是不是有什么语法错误
always能后面用3个边沿触发吗?
谢谢!小弟先谢过了!
reg HOLD_BEGIN;
always @(negedge HOLD_C or posedge DOWN_TIME or posedge RST)
begin
if (RST)HOLD_BEGIN=0;
else
HOLD_BEGIN=1;
end
你的TESTBENCH怎么写的?
没完整的看你的代码,不过从这段代码来看,确是出自初学者之手,一般能用于综合always的敏感列表中最多只会使用三个边沿触发,分别是:时钟、异步清零和异步置位,代码的风格为:
always @( posedge clk or negedge arst_n or aset_n )
if( !arst_n ) begin//异步清零,低有效
//...
end
else if( aset_n )begin//异步置位,低有效
//...
end
else begin//其他情况时
//...
end
而你写的那段代码据我推测是没法综合的(除非你找到了一个超级智能的综合器),因为综合工具会认为你的代码企图综合为两个时钟边沿控制的逻辑,而且一个是上升沿触发(DOWN_TIME),另一个是下降沿触发(HOLD_C),但可以仿真,因为从VerilogHDL语法角度看,没有问题,至于你说的HOLD_BEGIN总是为高,那么可能是你的激励中RST没有变高,如果RST变高,那么HOLD_BEGIN是会变为低的。
不是很明白楼上的"两个时钟边沿控制的逻辑,而且一个是上升沿触发(DOWN_TIME),另一个是下降沿触发(HOLD_C)"是什么意思,你写的"posedge clk or negedge arst_n"不同样是2个触发沿么