📄 qudong.txt
字号:
SOPC-EP2C8 开发板 数码管驱动程序:2008-03-13 22:03segment 主程序:
module segment(clk,rst_n,sw0,sw1,sw2,sw3,hc_cp,hc_si);
input clk,rst_n,sw0,sw1,sw2,sw3;
output hc_cp,hc_si;
reg[3:0] data;
always @(posedge clk or negedge rst_n)
if(!rst_n)
data<=4'hf;
else if(sw0==1'b0)
data<=4'd0;
else if(sw1==1'b0)
data<=4'd1;
else if(sw2==1'b0)
data<=4'd2;
else if(sw3==1'b0)
data<=4'd3;
hc164_driver hc164_driver_inst( //例化HC164驱动程序
.clk (clk),
.rst_n (rst_n),
.led (data),
.dot (data),
.seg_value ({4{data}}),
.hc_cp (hc_cp),
.hc_si (hc_si)
);
endmodule
HC164驱动程序:
module hc164_driver(clk,rst_n,led,dot,seg_value,hc_cp,hc_si);
input clk;
input rst_n;
input[3:0] led;
input[3:0] dot;
input[15:0] seg_value;
output reg hc_cp;
output hc_si;
reg[5:0] tx_cnt;
reg[6:0] hex2led;
reg[3:0] hc_data_34bit;
reg hc_data_31bit;
wire [15:0] hc_data= {led,hc_data_34bit,hex2led[6:2],hc_data_31bit,hex2led[1:0]};
wire [15:0] hc_data_inv= {hc_data[0],hc_data[1],hc_data[2],hc_data[3],hc_data[4],hc_data[5],hc_data[6],hc_data[7],hc_data[8],hc_data[9],hc_data[10],hc_data[11],hc_data[12],hc_data[13],hc_data[14],hc_data[15]};
reg[15:0] clk_cnt;
always @(posedge clk or negedge rst_n)
if(!rst_n) clk_cnt<=16'd0;
else clk_cnt<=clk_cnt+1'b1;
reg[1:0] seg_led_num;
always @(posedge clk or negedge rst_n)
if(!rst_n) seg_led_num<=2'b00;
else if(clk_cnt==16'hffff) seg_led_num<=seg_led_num+1'b1;
reg[3:0] hex;
always @(*)
case( seg_led_num)
2'b00: hex=seg_value[15:12];
2'b01: hex=seg_value[11:8];
2'b10: hex=seg_value[7:4];
2'b11: hex=seg_value[3:0];
endcase
always @(*)
begin
case (hex)
4'h1: hex2led=7'b0010_100;
4'h2: hex2led=7'b1011_011;
4'h3: hex2led=7'b1011_110;
4'h4: hex2led=7'b0111_100;
4'h5: hex2led=7'b1101_110;
4'h6: hex2led=7'b1101_111;
4'h7: hex2led=7'b1010_100;
4'h8: hex2led=7'b1111_111;
4'h9: hex2led=7'b1111_100;
4'hA: hex2led=7'b1111_101;
4'hB: hex2led=7'b0101_111;
4'hC: hex2led=7'b1100_011;
4'hD: hex2led=7'b0011_111;
4'hE: hex2led=7'b1101_011;
4'hF: hex2led=7'b1110_111;
default: hex2led=7'b1110_111;
endcase
end
always @(*)
case ( seg_led_num)
2'b00: hc_data_34bit[3:0]=4'b0111;
2'b01: hc_data_34bit[3:0]=4'b1011;
2'b10: hc_data_34bit[3:0]=4'b1101;
2'b11: hc_data_34bit[3:0]=4'b1110;
endcase
always @(*)
case ( seg_led_num)
2'b00: hc_data_31bit=dot[3];
2'b01: hc_data_31bit=dot[2];
2'b10: hc_data_31bit=dot[1];
2'b11: hc_data_31bit=dot[0];
endcase
always @(posedge clk or negedge rst_n)
if (!rst_n) tx_cnt<=6'd0;
else if (clk_cnt[15]) tx_cnt<=6'b0;
else if ((!clk_cnt[15]) && (tx_cnt<=6'd32)) tx_cnt<=tx_cnt+1'b1;
always @(posedge clk or negedge rst_n)
if (!rst_n) hc_cp<=1'b0;
else if ((!clk_cnt[15]) && (tx_cnt<6'd32)) hc_cp<=!hc_cp;
assign hc_si=hc_data_inv[tx_cnt[4:1]];
endmodule
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -