飓风cyclone FPGA开发板verilog逻辑例程Quartus工程源码文件(16例): low_cost_lcd S1_38yima S2_div S3_WAVE S4_LCD_V S4_LCD_VHDL S5_UART S6_VGA S6_VGA_change S7_PS2_LCD S7_PS2_RS232 S8_test T1_SW_PB T2_USB_IN T3_USB_OUT T4_LED_RUN 1。源文件保存在src目录,QII的工程文件保存在Proj目录; 2。程序可以在VGA显示器上以800x600分辨率显示方波示例和字母示例 3。具体设计参考代码。 `timescale 1ns/1ns module UART_tb; wire tbre; wire tsre; wire sdo ; wire rxd; reg [7:0] din; reg rst ; reg clk16x ; reg wrn; reg rdn; wire [7:0] dout; wire data_ready; wire framing_error ; wire parity_error ; uart PC (.dout(dout), .data_ready(data_ready), .framing_error(framing_error), .parity_error(parity_error), .rxd(rxd), .clk16x(clk16x), .rst(rst), .rdn(rdn), .din(din), .tbre(tbre), .tsre(tsre), .wrn(wrn), .sdo(sdo) ) ; uart_if FPGA (.clk(clk16x), .rst_n(~rst), .txd(rxd), .rxd(sdo) ); // Enter fixture code here initial begin din = 0; rst = 0; clk16x = 0; wrn = 1; rdn = 1; end always #10 clk16x = ~clk16x ; initial begin #3 rst = 1'b1 ; din ="R";// 8'b11110000 ; #5000 rst = 1'b0 ; #30 wrn = 1'b0 ; #150 wrn = 1'b1 ; //#4000 din ="r"; // 8'b10101010 ; //#870 wrn = 1'b0 ; //#200 wrn = 1'b1 ; #104000 din ="r"; // 8'b10101010 ; #870 wrn = 1'b0 ; #200 wrn = 1'b1 ; #104000 $stop; end always @(posedge data_ready) begin #100 rdn=0; #500 rdn=1; end endmodule // Uart_tb
8段数码管静态显示实验cylone4e FPGA(EP4CE6)Verilog例程quartus11.0工程源码 module sled(seg,dig,clock,); input clock; output [7:0] seg; //数码管段码输出 output [3:0] dig; //数码管位码输出 reg [7:0] seg; //数码管段码输出寄存器 reg [3:0] dig; //数码管位码输出寄存器 reg [3:0] disp_dat; //显示数据寄存器 reg [36:0] count; //定义计数寄存器 always @ (posedge clock ) begin count = count + 1'b1; dig= 8'b00000000;// end always @ (count[24]) begin disp_dat = {count[28:25]}; end always @ (disp_dat) begin case (disp_dat) 4'h0 : seg = 8'hc0; //显示"0" 4'h1 : seg = 8'hf9; //显示"1" 4'h2 : seg = 8'ha4; //显示"2" 4'h3 : seg = 8'hb0; //显示"3" 4'h4 : seg = 8'h99; //显示"4" 4'h5 : seg = 8'h92; //显示"5" 4'h6 : seg = 8'h82; //显示"6" 4'h7 : seg = 8'hf8; //显示"7" 4'h8 : seg = 8'h80; //显示"8" 4'h9 : seg = 8'h90; //显示"9" 4'ha : seg = 8'h88; //显示"a" 4'hb : seg = 8'h83; //显示"b" 4'hc : seg = 8'hc6; //显示"c" 4'hd : seg = 8'ha1; //显示"d" 4'he : seg = 8'h86; //显示"e" 4'hf : seg = 8'h8e; //显示"f"
LCD12864屏显示中文实验cylone4e FPGA(EP4CE6)Verilog例程quartus11.0工程源码,可以做为你的学习设计参考。 module LCD12864 (clk, rs, rw, en,dat); input clk; //系统时钟输入50M output [7:0] dat; //LCD的8位数据口 output rs,rw,en; //LCD的控制脚 reg e; reg [7:0] dat; reg rs; reg [15:0] counter; reg [6:0] current,next; reg clkr; reg [1:0] cnt; //定义的一些状态机。 parameter set0=6'h0; parameter set1=6'h1; parameter set2=6'h2; parameter set3=6'h3; parameter set4=6'h4; parameter set5=6'h5; parameter set6=6'h6; parameter dat0=6'h7; parameter dat1=6'h8; parameter dat2=6'h9; parameter dat3=6'hA; parameter dat4=6'hB; parameter dat5=6'hC; parameter dat6=6'hD; parameter dat7=6'hE; parameter dat8=6'hF; parameter dat9=6'h10; parameter dat10=6'h11; parameter dat11=6'h12; parameter dat12=6'h13; parameter dat13=6'h14; parameter dat14=6'h15; parameter dat15=6'h16; parameter dat16=6'h17; parameter dat17=6'h18; parameter dat18=6'h19; parameter dat19=6'h1A; parameter dat20=6'h1B; parameter dat21=6'h1C; parameter dat22=6'h1D; parameter dat23=6'h1E; parameter dat24=6'h1F; parameter dat25=6'h20; parameter dat26=6'h21; parameter dat27=6'h22; parameter dat28=6'h23; parameter dat29=6'h24; parameter dat30=6'h25; parameter dat31=6'h26; parameter dat32=6'h27; parameter dat33=6'h28; parameter dat34=6'h29; parameter dat35=6'h2A; parameter dat36=6'h2B; parameter dat37=6'h2C; parameter dat38=6'h2D; parameter dat39=6'h2E; parameter dat40=6'h3F; parameter nul=6'h35; always @(posedge clk) // begin counter=counter+1; if(counter==16'h000f) clkr=~clkr; end always @(posedge clkr) begin current=next; case(current) set0: begin rs<=0; dat<=8'h31; next<=set1; end //*设置8位格式,* set1: begin rs<=0; dat<=8'h0C; next<=set2; end //*整体显示,关光标,不闪烁*/ set2: begin rs<=0; dat<=8'h06; next<=set3; end //*设定输入方式,增量不移位*/ set3: begin rs<=0;
基于CYCLONE2 FPGA设计的频率计+串口通信实验quartus9.0工程源码+文档说明资料, /******************************************************************************* ** 文件名称:uart.v ** 功能描述:串口通信__FPGA和上位机通信(波特率:9600bps,10个bit是1位起始位,8个数据位,1个结束) *******************************************************************************/ module uart( clk, rst, rxd, txd, start, data_cnt, count1, count2, count3, count4, count5, count6, count7, count8, send_finish ); input clk; //系统50MHZ时钟 input rst; //复位 input rxd; //串行数据接收端 output txd; //串行数据发送端 input start; //开始采集信号 input[3:0] data_cnt; //数据位标志 output send_finish; //发送完成标志 input [7:0] count1; input [7:0] count2; input [7:0] count3; input [7:0] count4; input [7:0] count5; input [7:0] count6; input [7:0] count7; input [7:0] count8; reg[15:0] div_reg; //分频计数器,分频值由波特率决定。分频后得到频率8倍波特率的时钟 reg[2:0] div8_tras_reg; //该寄存器的计数值对应发送时当前位于的时隙数 reg[3:0] state_tras; //发送状态寄存器 reg clkbaud_tras; //以波特率为频率的发送使能信号 reg clkbaud8x; //以8倍波特率为频率的时钟,它的作用是将发送或接受一个bit的时钟周期分为8个时隙 reg trasstart; //开始发送标志 reg send_finish; reg txd_reg; //发送寄存器 reg[7:0] rxd_buf; //接受数据缓存 reg[7:0] txd_buf; //发送数据缓存 reg[3:0] send_state; //发送状态寄存器 parameter div_par=16'h145; //分频参数,其值由对应的波特率计算而得,按此参数分频的时钟频率是波倍特率的8 //倍,此处值对应9600的波特率,即分频出的时钟频率是9600*8 (CLK50M) assign txd = txd_reg; // assign send_state=data_cnt; /*******分频得到8倍波特率的时钟*********/ always@(posedge clk ) begin if(!rst) div_reg<=0; else begin if(div_reg==div_par-1'b1) div_reg<=0; else div_reg<=div_reg+1'b1; end end always@(posedge clk) begin if(!rst) clkbaud8x<=0; else if(div_reg==div_par-1'b1) clkbaud8x<=~clkbaud8x;//分频得到8倍波特率的时钟:clkbaud8x end // *******************************/ always@(posedge clkbaud8x or negedge rst)//clkbaud8x
ps2键盘输入UART串口输出实验cylone4e FPGA(EP4CE6)Verilog例程quartus11.0工程源码,可以做为你的学习设计参考。 /*FPGA通过ps2接收键盘数据,然后把接收到的字母A到Z键值转换相应的ASII码,通过串口发送到PC机上。 实验时,需要接键盘,还要用调试助手,下载程序后,在键盘上按下一个键,比如A,则在PC调试助手上可看到A */ `timescale 1ns / 1ps module ps2_key(clk,rst_n,ps2k_clk,ps2k_data,rs232_tx); input clk; //50M时钟信号 input rst_n; //复位信号 input ps2k_clk; //PS2接口时钟信号 input ps2k_data; //PS2接口数据信号 output rs232_tx; // RS232发送数据信号 wire[7:0] ps2_byte; // 1byte键值 wire ps2_state; //按键状态标志位 wire bps_start; //接收到数据后,波特率时钟启动信号置位 wire clk_bps; // clk_bps的高电平为接收或者发送数据位的中间采样点 ps2scan ps2scan( .clk(clk), //按键扫描模块 .rst_n(rst_n), .ps2k_clk(ps2k_clk), .ps2k_data(ps2k_data), .ps2_byte(ps2_byte), .ps2_state(ps2_state) ); speed_select speed_select( .clk(clk), .rst_n(rst_n), .bps_start(bps_start), .clk_bps(clk_bps) ); my_uart_tx my_uart_tx( .clk(clk), .rst_n(rst_n), .clk_bps(clk_bps), .rx_data(ps2_byte), .rx_int(ps2_state), .rs232_tx(rs232_tx), .bps_start(bps_start) ); endmodule
stm8S105 UART AT收发正常
2021-12-02 15:55:09 569KB stm8 UART AT
1
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