FPGA设计时分秒进位数字时钟verilog实验Quartus9.1工程源码+设计说明文件 /* 本实验实现一个能显示小时,分钟,秒的数字时钟。 */ module clock(clk,rst,dataout,en); input clk,rst; output[7:0] dataout; reg[7:0] dataout; output[7:0] en; reg[7:0] en; reg[3:0] dataout_buf[7:0]; reg[25:0] cnt; reg[15:0] cnt_scan; reg[3:0] dataout_code; wire[5:0] cal; //各级进位标志 assign cal[0]=(dataout_buf[0]==9)?1:0; assign cal[1]=(cal[0]&&dataout_buf[1]==5)?1:0; assign cal[2]=(cal[1]&&dataout_buf[3]==9)?1:0; assign cal[3]=(cal[2]&&dataout_buf[4]==5)?1:0; assign cal[4]=(cal[3]&&dataout_buf[6]==9)?1:0; assign cal[5]=(cal[3]&&dataout_buf[6]==2&&dataout_buf[7]==1)?1:0; always@(posedge clk or negedge rst) begin if(!rst) begin cnt_scan<=0; en<=8'b1111_1110; end else begin cnt_scan<=cnt_scan+1; if(cnt_scan==16'hffff) begin en[7:1]<=en[6:0]; en[0]<=en[7]; end end end always@(*) begin case(en) 8'b1111_1110: dataout_code=dataout_buf[0]; 8'b1111_1101: dataout_code=dataout_buf[1]; 8'b1111_1011: dataout_code=dataout_buf[2]; 8'b1111_0111: dataout_code=dataout_buf[3]; 8'b1110_1111: dataout_code=dataout_buf[4]; 8'b1101_1111: dataout_code=dataout_buf[5]; 8'b1011_1111: dataout_code=dataout_buf[6]; 8'b0111_1111: dataout_code=dataout_buf[7]; default: dataout_code=dataout_buf[0]; endcase end always@(posedge clk or negedge rst) begin if(!rst) cnt<=0; else if(cnt!=40000000) cnt<=cnt+1; else cnt<=0; end always@(posedge clk or negedge rst) //实现计数和进位的功能 begin if(!rst) begin dataout_buf[0]<=0; dataout_buf[1]<=0; dataout_buf[2]<=15; dataout_buf[3]<=0; dataout_buf[4]<=0; dataout_buf[5]<=15; dataout_buf[6]<=2; dataout_buf[7]<=1; end else begin if(cnt==26'd40000000) begin if(!cal[0]) dataout_buf[0]<=dataout_buf[0]+1; else begin dataout_buf[0]
SDRAM硬件控制FPGA读写verilog设计实验Quartus9.1工程源码,可以做为你的学习设计基参考。 module SDRAM_HR_HW ( input CLOCK_50, input [3:0] KEY, input [17:0] SW, output [17:0] LEDR, output [6:0] HEX0, HEX1, //SDRAM side output [11:0] DRAM_ADDR, inout [15:0] DRAM_DQ, output DRAM_BA_0, DRAM_BA_1, DRAM_RAS_N, DRAM_CAS_N, DRAM_CKE, DRAM_CLK, DRAM_WE_N, DRAM_CS_N, DRAM_LDQM, DRAM_UDQM ); reg read; // read enable register reg write; // write enable register reg [1:0] state; // FSM state register reg [15:0] data_in; // data input register wire [15:0] DATA_OUT; // data output reg [15:0] data_out; // data output register wire DELAY_RESET; // delay for SDRAM controller load wire RESET_n = KEY[0]; // reset from KEY[0] assign LEDR = SW; Sdram_Control_4Port u0 ( // HOST Side .REF_CLK(CLOCK_50), .RESET_N(1'b1), // FIFO Write Side 1 .WR1_DATA(data_in), .WR1(write), .WR1_ADDR(0), .WR1_MAX_ADDR(640*512*2), .WR1_LENGTH(9'h100), .WR1_LOAD(!DELAY_RESET), .WR1_CLK(CLOCK_50), // FIFO Read Side 1 .RD1_DATA(DATA_OUT), .RD1(read), .RD1_ADDR(640*16), .RD1_MAX_ADDR(640*496), .RD1_LENGTH(9'h100), .RD1_LOAD(!DELAY_RESET), .RD1_CLK(CLOCK_50), // SDRAM Side .SA(DRAM_ADDR), .BA({DRAM_BA_1,DRAM_BA_0}), .CS_N(DRAM_CS_N), .CKE(DRAM_CKE), .RAS_N(DRAM_RAS_N), .CAS_N(DRAM_CAS_N), .WE_N(DRAM_WE_N), .DQ(DRAM_DQ), .DQM({DRAM_UDQM,DRAM_LDQM}), .SDR_CLK(DRAM_CLK) ); wire HEX3,HEX4,HEX5,HEX6,HEX7; SEG7_LUT_8 u1 ( .oSEG0(HEX0), // output SEG0 .oSEG1(HEX1), // output SEG1 .oSEG2(HEX2), // output SEG2 .oSEG3(HEX3), // output SEG3 .oSEG4(HEX4), // output SEG4 .oSEG5(HEX5), // output SEG5 .oSEG6(HEX6), // output SEG6 .oSEG7(HEX7), // outp
FPGA设计跑马灯verilog设计实验Quartus9.1工程源码 /*跑马灯实验:利用计数器轮流点亮LED灯,实现各种动态效果。 */ module ledwater(clk,rst,dataout); input clk,rst; output[7:0] dataout; reg[7:0] dataout; reg[22:0] cnt; always@(posedge clk or negedge rst) begin if(!rst) begin cnt<=0; dataout<=12'b111110_011111;//为0的bit位代表要点亮的LED的位置 end else begin cnt<=cnt+1; if(cnt==23'h7fffff) begin dataout[2:0]<=dataout[3:1]; dataout[5]<=dataout[0]; dataout[7:5]<=dataout[6:4]; dataout[5]<=dataout[7]; end end end endmodule
基于FIFO的串口发送器+串口自收发通信verilog设计实验Quartus9.1工程源码+设计说明文件,可以做为你的学习设计实验参考。 module uartfifo( clk,rst_n, rs232_tx ); input clk; // 25MHz主时钟 input rst_n; //低电平复位信号 output rs232_tx; //RS232发送数据信号 wire[7:0] wrf_din; //数据写入缓存FIFO输入数据总线 wire wrf_wrreq; //数据写入缓存FIFO数据输入请求,高有效 wire[7:0] tx_data; //串口待发送数据 wire tx_start; //串口发送数据启动标志位,高有效 wire fifo232_rdreq; //FIFO读请求信号,高有效 wire fifo_empty; //FIFO空标志位,高有效 assign tx_start = ~fifo_empty; //fifo有数据即启动串口模块发送数据 //例化232发送数据产生模块 datagene uut_datagene( .clk(clk), .rst_n(rst_n), .wrf_din(wrf_din), .wrf_wrreq(wrf_wrreq) ); //例化FIFO fifo232 fifo232_inst ( .clock(clk), .data(wrf_din), .rdreq(fifo232_rdreq), .wrreq(wrf_wrreq), .empty(fifo_empty), .q(tx_data) ); //例化串口发送模块 uart_ctrl uut_uartfifo( .clk(clk), .rst_n(rst_n), .tx_data(tx_data), .tx_start(tx_start), .fifo232_rdreq(fifo232_rdreq), .rs232_tx(rs232_tx) ); endmodule