新手入门
- 积分
- 16
- 金钱
- 16
- 注册时间
- 2019-5-3
- 在线时间
- 3 小时
|
FPGA新手小白(FPGA新起点开发板)实验任务是使用FPGA开发板上的6位数码管以静态方式依次显示000000、111111、222222至FFFFFF,结束后继续从000000开始计数,每0.5s变化一次。
写的这个程序运行后数码管是全亮,但全部都显示8,程序哪里出了问题呢?求大家指点。
//顶层模块
module top_seg_led_static(
input clk,
input rst_n,
output [5:0] sel,
output [7:0] seg_led
);
wire flag;
//计时器模块
time_count u_time_count(
.clk (clk),
.rst_n (rst_n),
.flag (flag)
);
seg_led_static u_seg_led_static(
.clk (clk),
.rst_n (rst_n),
.flag (flag),
.sel (sel),
.seg_led (sel_led)
);
endmodule
module time_count(
input clk,
input rst_n,
output reg[3:0] flag
);
reg [24:0] cnt;
always @(posedge clk or negedge rst_n)
begin
if(!rst_n)
begin
cnt <= 25'b0;
end
else
begin
if(cnt < 25'd25000000)
cnt <= cnt + 1'b1;
else
cnt <= 25'd0;
end
end
always @(posedge clk or negedge rst_n)
begin
if(!rst_n)
begin
flag <= 4'h0;
end
else
if(cnt == 25'd2500_0000)
begin
if(flag == 4'hF)
flag <= 4'h0;
else
flag <= flag + 4'h1;
end
else
begin
flag <= flag;
end
end
endmodule
//数码管静态显示模块
module seg_led_static(
input clk,
input rst_n,
input [3:0] flag,
output reg[5:0] sel,
output reg[7:0] seg_led
);
always @(posedge clk or negedge rst_n)
begin
if(!rst_n)
begin
sel <= 6'b111111;
end
else
begin
sel <= 6'b000000;
case (flag)
4'h0 : seg_led <= 8'b1100_0000;
4'h1 : seg_led <= 8'b1111_1001;
4'h2 : seg_led <= 8'b1010_0100;
4'h3 : seg_led <= 8'b1011_0000;
4'h4 : seg_led <= 8'b1001_1001;
4'h5 : seg_led <= 8'b1001_0010;
4'h6 : seg_led <= 8'b1000_0010;
4'h7 : seg_led <= 8'b1111_1000;
4'h8 : seg_led <= 8'b1000_0000;
4'h9 : seg_led <= 8'b1001_0000;
4'ha : seg_led <= 8'b1000_1000;
4'hb : seg_led <= 8'b1000_0011;
4'hc : seg_led <= 8'b1100_0110;
4'hd : seg_led <= 8'b1010_0001;
4'he : seg_led <= 8'b1000_0110;
4'hf : seg_led <= 8'b1000_1110;
default : seg_led <= 8'b1100_0000;
endcase
end
end
endmodule
|
|