verilog 如何计算输出端高电平次数

假设一时序电路输出端是out,有高电平有低电平,现在我想统计其中高电平的个数。我在程序后面加了这样一句always@(posedgeout)count_out<=coun... 假设一时序电路输出端是out,有高电平有低电平,现在我想统计其中高电平的个数。我在程序后面加了这样一句
always @ (posedge out)
count_out <= count_out +1;
但是我发现综合出来的电路不对,out没有接到计数器的时钟端上面。
可能是out类型定义错了,还是什么,请指教
展开
 我来答
百度网友b410eca
2012-08-06 · TA获得超过158个赞
知道答主
回答量:32
采纳率:0%
帮助的人:24万
展开全部
你这种写法的话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
更多追问追答
追问
是高电平不管持续多长时间都只算一个高电平,我为什么不能把out当做计数器的时钟呢,out上升沿,计数一次,这样就可以统计out高电平次数了??
追答
你用 posedge out, 这种形式,综合器会把它当成时钟信号或者计数器分频时钟信号来处理的,通不过。你要知道计数器它是时序逻辑的,是时钟沿触发的,你的out信号不可能和时钟没有一点关系吧,不能使凭空产生的吧,至少它有哪个状态应该和时钟沿有关,否则没法计数啊。
风雷小草
2012-08-07 · TA获得超过1711个赞
知道小有建树答主
回答量:1174
采纳率:0%
帮助的人:677万
展开全部
楼主这样写是可以的,贴出来的代码综合出来后,是一个与系统时钟异步的计数器。完全可以实现你的要求。至于为什么综合出来不对,你再仔细看看,只要没有其它的语法错误,综合结果应该没有错。
更多追问追答
追问
可以综合,综合没有错误。但是我看综合后的RTL电路时,发现out没有接到计数器的clk端口上去。 是不是就是不显示的?
追答
那么计数器的clk端口接到哪里去了?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
宋桓公
2012-08-11 · TA获得超过912个赞
知道小有建树答主
回答量:186
采纳率:0%
帮助的人:113万
展开全部
首先如果你的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;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式