logo资料库

基于FPGA控制ADC0809的verilog程序状态机.doc

第1页 / 共5页
第2页 / 共5页
第3页 / 共5页
第4页 / 共5页
第5页 / 共5页
资料共5页,全文预览结束
//------------------------------------------------------------------------------------------------- // // File // Generated // Author // //------------------------------------------------------------------------------------------------- `timescale 1 ns / 1 ps : ADC0809.v : 2011-07-21 : wangliang module ADC0809 ( seven_seg ,ale ,OE ,D ,EOC ,clk ,abc_in ,abc_out ,start ,rst ); //系统时钟 //外部控制的通道选择信号 //ADC0809 传进来的数据 //ADC0809 转换完成信号标志 //系统 复位 //FPGA 给数码管的数据 //FPGA 给 ADC0809 的地址锁存信号 //FPGA 给 ADC0809 的使能信号 //FPGA 给 ADC0809 的通道选择信号 //ADC0809 转换开始信号 input input input input input output output output output output [2:0] [7:0] ; clk ; abc_in D ; EOC ; rst ; [15:0] [2:0] seven_seg ; ale ; OE ; abc_out ; start ; parameter st0 = 3'b000, st1 = 3'b001, st2 = 3'b010, st3 = 3'b011, st4 = 3'b100, st5 = 3'b101, st6 = 3'b110 ; reg reg reg reg reg reg reg wire [2:0] p_state ; [2:0] [7:0] [7:0] [2:0] n_state ; ale_r OE_r start_r reg1 qq state ; ; ; ; ; ; assign state = p_state ; always @ (posedge clk or negedge rst)
begin if ( rst== 1'b0 ) begin p_state <= st0 qq <= 8'b0 ; ; end else begin qq <= qq + 1'b1; if ( ( qq >= 8'b0100_0010) && ( clk == 1'b1 ) ) begin qq <= 8'b0; p_state <=#1 n_state; end end end assign assign assign ; ale = ale_r OE = OE_r start = start_r ; ; assign abc_out = abc_in ; always @ ( EOC ,p_state ) begin case ( p_state ) st0 :begin ale_r <= #1 1'b0; start_r <= #1 1'b0; OE_r <= #1 1'b0; n_state <=#1 st1; end st1 :begin ale_r <= #1 1'b1; start_r <= #1 1'b0; OE_r <= #1 1'b0; n_state <=#1 st2; end st2 :begin ale_r <= #1 1'b0; start_r <= #1 1'b1; OE_r <= #1 1'b0; n_state <=#1 st3; end st3 :begin
ale_r <= #1 1'b0; start_r <= #1 1'b0; OE_r <= #1 1'b0; if ( EOC == 1'b1 ) n_state <=#1 st3; else n_state <=#1 st4; end st4 :begin ale_r <= #1 1'b0; start_r <= #1 1'b0; OE_r <= #1 1'b0; if ( EOC == 1'b0 ) n_state <=#1 st4; n_state <=#1 st5; else end st5 :begin ale_r <= #1 1'b0; start_r <= #1 1'b0; OE_r <= #1 1'b1; n_state <=#1 st6; end st6 :begin ale_r <= #1 1'b0; start_r <= #1 1'b0; OE_r <= #1 1'b1; reg1 <=#1 D ; n_state <=#1 st0; end default :begin ale_r <= #1 1'b0; start_r <= #1 1'b0; OE_r <= #1 1'b0; n_state <=#1 st0; end endcase end /******************** 数码管显示译码部分 ***********************************/ reg reg Y_r_1; Y_r_2; [7:0] [7:0]
assign seven_seg[7:0] ={1'b1,(~Y_r_1[6:0])}; assign seven_seg[15:8] = {1'b1,(~Y_r_2[6:0])}; always @(reg1[3:0] ) begin Y_r_1 = 7'b1111111; case (reg1[3:0] ) 4'b0000: Y_r_1 = 7'b0111111; // 0 4'b0001: Y_r_1 = 7'b0000110; // 1 4'b0010: Y_r_1 = 7'b1011011; // 2 4'b0011: Y_r_1 = 7'b1001111; // 3 4'b0100: Y_r_1 = 7'b1100110; // 4 4'b0101: Y_r_1 = 7'b1101101; // 5 4'b0110: Y_r_1 = 7'b1111101; // 6 4'b0111: Y_r_1 = 7'b0000111; // 7 4'b1000: Y_r_1 = 7'b1111111; // 8 4'b1001: Y_r_1 = 7'b1101111; // 9 4'b1010: Y_r_1 = 7'b1110111; // A 4'b1011: Y_r_1 = 7'b1111100; // b 4'b1100: Y_r_1 = 7'b0111001; // c 4'b1101: Y_r_1 = 7'b1011110; // d 4'b1110: Y_r_1 = 7'b1111001; // E 4'b1111: Y_r_1 = 7'b1110001; // F default: Y_r_1 = 7'b0000000; endcase end always @( reg1[7:4] ) begin Y_r_2 = 7'b1111111; case ( reg1[7:4] ) 4'b0000: Y_r_2 = 7'b0111111; // 0 4'b0001: Y_r_2 = 7'b0000110; // 1 4'b0010: Y_r_2 = 7'b1011011; // 2 4'b0011: Y_r_2 = 7'b1001111; // 3 4'b0100: Y_r_2 = 7'b1100110; // 4 4'b0101: Y_r_2 = 7'b1101101; // 5 4'b0110: Y_r_2 = 7'b1111101; // 6 4'b0111: Y_r_2 = 7'b0000111; // 7 4'b1000: Y_r_2 = 7'b1111111; // 8 4'b1001: Y_r_2 = 7'b1101111; // 9 4'b1010: Y_r_2 = 7'b1110111; // A 4'b1011: Y_r_2 = 7'b1111100; // b
4'b1100: Y_r_2 = 7'b0111001; // c 4'b1101: Y_r_2 = 7'b1011110; // d 4'b1110: Y_r_2 = 7'b1111001; // E 4'b1111: Y_r_2 = 7'b1110001; // F default: Y_r_2 = 7'b0000000; endcase end endmodule
分享到:
收藏