在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2695|回复: 2

[求助] Verilog实现上升沿开始计数,下个上升沿停止计数

[复制链接]
发表于 2015-5-7 18:39:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
如题,用来测量脉冲信号周期,编译后错误是
Error (10133): Verilog HDL Expression error at Period.v(26): illegal part select of unpacked array "cnt"
程序如下:
module Period(
    clk,
    rst_n,
    signal,
    percounter
    );
input clk, rst_n, signal;
output signed [9:0] percounter;
reg  [9:0] percounter;
reg  signal_reg;
reg  cnt[9:0];
wire signal_pos;
always @ ( posedge clk or negedge rst_n ) begin
     if ( !rst_n )  begin
         signal_reg <= 1'b0;
     end
     else begin
         signal_reg <= signal;
     end
end

assign signal_pos = signal & (~signal_reg);

always @ ( posedge clk or negedge rst_n ) begin
     if ( !rst_n ) begin
         cnt[9:0] <= 10'd0;
     end
     else if ( signal_pos == 1'b1 ) begin
         cnt[9:0] <= 10'd0;
     end
     else begin
         cnt[9:0] <= cnt[9:0] + 10'd1;
     end
end

always @ ( posedge clk or negedge rst_n ) begin
     if ( !rst_n ) begin
         percounter[9:0] <= 10'd0;
     end
     else if ( signal_pos == 1'b1 ) begin
         percounter[9:0] <= cnt[9:0];
     end
     else begin
  
     end
end

endmodule

求大神帮忙看看怎么改,不胜感谢~~
发表于 2015-5-7 20:02:18 | 显示全部楼层
reg  cnt[9:0]
reg [9:0] cnt
发表于 2015-5-8 09:00:06 | 显示全部楼层
module Period(
    clk,
    rst_n,
    signal,
    percounter
    );
input clk, rst_n, signal;
output [9:0] percounter;
reg  [9:0] percounter;
reg  signal_reg;
reg  start;  //0 stop,1 start
wire signal_pos;
always @ ( posedge clk or negedge rst_n ) begin
     if ( !rst_n )  begin
         signal_reg <= 1'b0;
     end
     else begin
         signal_reg <= signal;
     end
end

assign signal_pos = signal & (~signal_reg);

always @ ( posedge clk or negedge rst_n ) begin
     if ( !rst_n ) begin
         start <= 1'b0;
     end
     else if ( signal_pos == 1'b1 ) begin
         start <= ~start;
     end
end

always @ ( posedge clk or negedge rst_n ) begin
     if ( !rst_n ) begin
         percounter[9:0] <= 10'd0;
     end
     else if ( start == 1'b1 ) begin
          percounter <= percounter + 10'b1;
     end
     else begin
          percounter <= percounter ;
          //precounter <= 10'b0      ; //clr or keep
     end
end

endmodule
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-23 15:51 , Processed in 0.021786 second(s), 11 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表