verilog 如何计算输出端高电平次数
假设一时序电路输出端是out,有高电平有低电平,现在我想统计其中高电平的个数。我在程序后面加了这样一句always@(posedgeout)count_out<=coun...
假设一时序电路输出端是out,有高电平有低电平,现在我想统计其中高电平的个数。我在程序后面加了这样一句
always @ (posedge out)
count_out <= count_out +1;
但是我发现综合出来的电路不对,out没有接到计数器的时钟端上面。
可能是out类型定义错了,还是什么,请指教 展开
always @ (posedge out)
count_out <= count_out +1;
但是我发现综合出来的电路不对,out没有接到计数器的时钟端上面。
可能是out类型定义错了,还是什么,请指教 展开
3个回答
展开全部
你这种写法的话out会被认为是时钟,或者是计数器,因为计数器跟时钟很密切。
你说的高电平个数,应该是针对时钟周期来说的么,还是说高电平不管持续多长时间都只算一个高电平。
always @(posedge clk or negedge rst )
begin
if(!rst)
count_out <=0;
else
if(out)
count_out <= count_out+1;
else
cunt_out <= count_out;
end
你说的高电平个数,应该是针对时钟周期来说的么,还是说高电平不管持续多长时间都只算一个高电平。
always @(posedge clk or negedge rst )
begin
if(!rst)
count_out <=0;
else
if(out)
count_out <= count_out+1;
else
cunt_out <= count_out;
end
更多追问追答
追问
是高电平不管持续多长时间都只算一个高电平,我为什么不能把out当做计数器的时钟呢,out上升沿,计数一次,这样就可以统计out高电平次数了??
追答
你用 posedge out, 这种形式,综合器会把它当成时钟信号或者计数器分频时钟信号来处理的,通不过。你要知道计数器它是时序逻辑的,是时钟沿触发的,你的out信号不可能和时钟没有一点关系吧,不能使凭空产生的吧,至少它有哪个状态应该和时钟沿有关,否则没法计数啊。
展开全部
楼主这样写是可以的,贴出来的代码综合出来后,是一个与系统时钟异步的计数器。完全可以实现你的要求。至于为什么综合出来不对,你再仔细看看,只要没有其它的语法错误,综合结果应该没有错。
更多追问追答
追问
可以综合,综合没有错误。但是我看综合后的RTL电路时,发现out没有接到计数器的clk端口上去。 是不是就是不显示的?
追答
那么计数器的clk端口接到哪里去了?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
首先如果你的out是设为输出端口,如果你要检测out的高电平,那么对于你的检测电路,就要设为输入端口。也就是输出模块将out设为输出(output out),检测模块将out设为输入(input out)。
其次你这种检测写法不太好,无视时钟。
这是检测部分:
reg F1,F2; // F2 Previous State, F1 Current State
always@(posedge CLK or negedge RSTn)
if(!RSTn)
begin
F1<=1'b0;
F2<=1'b0;
end
else
begin
F1<= out;
F2<= F1;
end
wire up = F1 & !F2; //检测上升沿
// wire down = F2 & !F1; //检测下降沿
always@(posedge CLK or negedge RSTn)
if(up)count_out <= count_out +1;
其次你这种检测写法不太好,无视时钟。
这是检测部分:
reg F1,F2; // F2 Previous State, F1 Current State
always@(posedge CLK or negedge RSTn)
if(!RSTn)
begin
F1<=1'b0;
F2<=1'b0;
end
else
begin
F1<= out;
F2<= F1;
end
wire up = F1 & !F2; //检测上升沿
// wire down = F2 & !F1; //检测下降沿
always@(posedge CLK or negedge RSTn)
if(up)count_out <= count_out +1;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询