|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
本帖最后由 guozheng 于 2013-4-9 14:13 编辑
用verilog对输入脉冲信号进行实时的计数,每秒钟输出一次计数值;因为使用8段数码管进行显示,所以在程序中有实例化的部分,但实例化的部分一直报错,求指导。 时钟频率100MHz;
主模块:
- module pulse_counter(pulse,clk,rst_n,counter2,counter1,out1,out2,out3,out4,out5);
- output reg [7:0] out1,out2,out3,out4,out5;
- //output wire [9:0] di;
- input pulse;
- input clk;
- input rst_n;
- wire [7:0]out_1,out_2,out_3,out_4,out_5;
- output reg [26:0]counter1; //每秒显示一次数字;
- output reg [16:0] counter2;//显示的数字;
- reg rst;
- reg [26:0] reference=27'd0;//通过reference来判断是否在1s之内;
- assign di=10'd0;
- parameter range=27'd100000000;
- always @(posedge clk)
- rst=rst_n;
- always @(posedge clk or negedge rst)
- if(!rst)
- counter1=0;
- else if(counter1<range-1)
- counter1=counter1+1;
- else
- counter1=0;
- always @(posedge pulse or negedge rst)
- begin
- if(!rst)
- counter2=0;
- else if(counter1>reference)
- counter2=counter2+1;
- else
- begin
- xianshi uxianshi(counter2,out_1,out_2,out_3,out_4,out_5);
- //xianshi u_xianshi(counter2,out_1,out_2,out_3,out_4,out_5);
- out1=out_1;
- out2=out_2;
- out3=out_3;
- out4=out_4;
- out5=out_5;
- counter2=1;
- end
- //reference=counter1;
- end
- always @(posedge pulse or negedge rst)
- if(!rst)
- reference=0;
- else
- reference=counter1;
-
-
- //xianshi u_xianshi(counter2,out1,out2,out3,out4,out5);
- endmodule
复制代码
被调用的模块:
- module xianshi(in,out1,out2,out3,out4,out5);
- input [16:0] in;
- output wire [7:0] out1,out2,out3,out4,out5;
- //output wire [9:0] di;
- wire [3:0] num5,num4,num3,num2,num1;
- reg [7:0] temp1,temp2,temp3,temp4,temp5;
- assign num5=in/10000;
- assign num4=(in-num5*10000)/1000;
- assign num3=(in-num5*10000-num4*1000)/100;
- assign num2=(in-num5*10000-num4*1000-num3*100)/10;
- assign num1=in-num5*10000-num4*1000-num3*100-num2*10;
- parameter num_0=8'b11100111;
- parameter num_1=8'b00100001;
- parameter num_2=8'b11001011;
- parameter num_3=8'b01101011;
- parameter num_4=8'b00101101;
- parameter num_5=8'b01101110;
- parameter num_6=8'b11101110;
- parameter num_7=8'b00100011;
- parameter num_8=8'b11101111;
- parameter num_9=8'b00101111;
- case(num5)
- 0:assign out5=num_0;
- 1:assign out5=num_1;
- 2:assign out5=num_2;
- 3:assign out5=num_3;
- 4:assign out5=num_4;
- 5:assign out5=num_5;
- 6:assign out5=num_6;
- 7:assign out5=num_7;
- 8:assign out5=num_8;
- 9:assign out5=num_9;
- endcase
- case(num4)
- 0:assign out4=num_0;
- 1:assign out4=num_1;
- 2:assign out4=num_2;
- 3:assign out4=num_3;
- 4:assign out4=num_4;
- 5:assign out4=num_5;
- 6:assign out4=num_6;
- 7:assign out4=num_7;
- 8:assign out4=num_8;
- 9:assign out4=num_9;
- endcase
- case(num3)
- 0:assign out3=num_0;
- 1:assign out3=num_1;
- 2:assign out3=num_2;
- 3:assign out3=num_3;
- 4:assign out3=num_4;
- 5:assign out3=num_5;
- 6:assign out3=num_6;
- 7:assign out3=num_7;
- 8:assign out3=num_8;
- 9:assign out3=num_9;
- endcase
- case(num2)
- 0:assign out2=num_0;
- 1:assign out2=num_1;
- 2:assign out2=num_2;
- 3:assign out2=num_3;
- 4:assign out2=num_4;
- 5:assign out2=num_5;
- 6:assign out2=num_6;
- 7:assign out2=num_7;
- 8:assign out2=num_8;
- 9:assign out2=num_9;
- endcase
- case(num1)
- 0:assign out1=num_0;
- 1:assign out1=num_1;
- 2:assign out1=num_2;
- 3:assign out1=num_3;
- 4:assign out1=num_4;
- 5:assign out1=num_5;
- 6:assign out1=num_6;
- 7:assign out1=num_7;
- 8:assign out1=num_8;
- 9:assign out1=num_9;
- endcase
- endmodule
复制代码
错误提示如下:
@E: CG285 :"E:\FPGA\pulse_counter.v":36:13:36:20|Expecting statement
@E: CS187 :"E:\FPGA\pulse_counter.v":57:0:57:8|Expecting endmodule |
|