基于FPGA的数码管扫描实验Verilog逻辑源码Quartus工程文件+文档说明,6个共阳数码管,FPGA型号Cyclone4E系列中的EP4CE6F17C8,Quartus版本17.1。 介绍共阳极数码管扫描的原理,使用 6 位模 10 计数器组成 6 位十进制计数器,将计数器的 值送到数码管扫描模块显示。 module seg_test( input clk, input rst_n, output[5:0]seg_sel, output[7:0]seg_data ); reg[31:0] timer_cnt; reg en_1hz; //1 second , 1 counter enable always@(posedge clk or negedge rst_n) begin if(rst_n == 1'b0) begin en_1hz <= 1'b0; timer_cnt = 32'd49_999_999) begin en_1hz <= 1'b1; timer_cnt <= 32'd0; end else begin en_1hz <= 1'b0; timer_cnt <= timer_cnt + 32'd1; end end wire[3:0] count0; wire t0; count_m10 count10_m0( .clk (clk), .rst_n (rst_n), .en (en_1hz), .clr (1'b0), .data (count0), .t (t0) ); wire[3:0] count1; wire t1; count_m10 count10_m1( .clk (clk), .rst_n (rst_n), .en (t0), .clr (1'b0), .data (count1), .t (t1) ); wire[3:0] count2; wire t2; count_m10 count10_m2( .clk (clk), .rst_n (rst_n), .en (t1), .clr (1'b0), .data (count2), .t (t2) ); wire[3:0] count3; wire t3; count_m10 count10_m3( .clk (clk), .rst_n (rst_n), .en (t2), .clr (1'b0), .data (count3), .t (t3) ); wire[3:0] count4; wire t4; count_m10 count10_m4( .clk (clk), .rst_n (rst_n), .en (t3), .clr (1'b0), .data (count4), .t (t4) ); wire[3:0] count5; wire t5; count_m10 count10_m5( .clk (clk), .rst_n (rst_n), .en (t4), .clr (1'b0), .data (count5), .t (t5) ); wire[6:0] seg_data_0; seg_decoder seg_decoder_m0( .bin_data (count5), .seg_data (seg_data_0) ); wire[6:0] seg_data_1; seg_decoder seg_decoder_m1( .bin_data (count4), .seg_data (seg_data_1) ); wire[6:0] se
FPGA设计读取SD卡中的图片并通过TFT-LCD屏显示输出的Verilog设计Quartus工程源码文件,FPGA型号Cyclone4E系列中的EP4CE10F17C8,Quartus版本18.0。 module top_sd_photo_lcd( input sys_clk , //系统时钟 input sys_rst_n , //系统复位,低电平有效 //SD卡接口 input sd_miso , //SD卡SPI串行输入数据信号 output sd_clk , //SD卡SPI时钟信号 output sd_cs , //SD卡SPI片选信号 output sd_mosi , //SD卡SPI串行输出数据信号 //SDRAM接口 output sdram_clk , //SDRAM 时钟 output sdram_cke , //SDRAM 时钟有效 output sdram_cs_n , //SDRAM 片选 output sdram_ras_n , //SDRAM 行有效 output sdram_cas_n , //SDRAM 列有效 output sdram_we_n , //SDRAM 写有效 output [1:0] sdram_ba , //SDRAM Bank地址 output [1:0] sdram_dqm , //SDRAM 数据掩码 output [12:0] sdram_addr , //SDRAM 地址 inout [15:0] sdram_data , //SDRAM 数据 //lcd接口 output lcd_hs , //LCD 行同步信号 output lcd_vs , //LCD 场同步信号 output lcd_de , //LCD 数据输入使能 output [15:0] lcd_rgb , //LCD RGB565颜色数据 output lcd_bl , //LCD 背光控制信号 output lcd_rst , //LCD 复位信号 output lcd_pclk //LCD 采样时钟 ); //parameter define parameter PHOTO_H_PIXEL = 24'd800 ; //设置SDRAM缓存大小 parameter PHOTO_V_PIXEL = 24'd480 ; //设置SDRAM缓存大小 //wire define wire clk_100m ; //100mhz时钟,SDRAM操作时钟 wire clk_100m_shift ; //100mhz时钟,SDRAM相位偏移时钟 wire clk_50m ; wire clk_50m_180deg ; wire clk_33_3m ; wire rst_n ; wire locked ; wire sys_init_done ; //系统初始化
8段数码管静态显示Verilog设计逻辑Quartus工程源码文件,FPGA型号Cyclone4E系列中的EP4CE10F17C8,Quartus版本18.0。 module seg_led_static_top ( input sys_clk , // 系统时钟 input sys_rst_n, // 系统复位信号(低有效) output [5:0] sel , // 数码管位选 output [7:0] seg_led // 数码管段选 ); //parameter define parameter TIME_SHOW = 25'd25000_000; // 数码管变化的时间间隔0.5s //wire define wire add_flag; // 数码管变化的通知信号 //***************************************************** //** main code //***************************************************** //每隔0.5s产生一个时钟周期的脉冲信号 time_count #(.MAX_NUM(TIME_SHOW) ) u_time_count( .clk (sys_clk ), .rst_n (sys_rst_n), .flag (add_flag ) ); //每当脉冲信号到达时,使数码管显示的数值加1 seg_led_static u_seg_led_static ( .clk (sys_clk ), .rst_n (sys_rst_n), .add_flag (add_flag ), .sel (sel ), .seg_led (seg_led ) ); endmodule
FPGA设计LCD屏幕显示彩条Verilog设计Quartus工程源码文件,FPGA型号Cyclone4E系列中的EP4CE10F17C8,Quartus版本18.0。 module lcd_rgb_colorbar( input sys_clk, //系统时钟 input sys_rst_n, //系统复位 //RGB LCD接口 output lcd_de, //LCD 数据使能信号 output lcd_hs, //LCD 行同步信号 output lcd_vs, //LCD 场同步信号 output lcd_clk, //LCD 像素时钟 inout [15:0] lcd_rgb, //LCD RGB565颜色数据 output lcd_rst, output lcd_bl ); wire [15:0] lcd_id ; //LCD屏ID wire lcd_pclk ; //LCD像素时钟 wire [10:0] pixel_xpos; //当前像素点横坐标 wire [10:0] pixel_ypos; //当前像素点纵坐标 wire [10:0] h_disp ; //LCD屏水平分辨率 wire [10:0] v_disp ; //LCD屏垂直分辨率 wire [15:0] pixel_data; //像素数据 wire [15:0] lcd_rgb_o ; //输出的像素数据 wire [15:0] lcd_rgb_i ; //输入的像素数据 //***************************************************** //** main code //***************************************************** //像素数据方向切换 assign lcd_rgb = lcd_de ? lcd_rgb_o : {16{1'bz}}; assign lcd_rgb_i = lcd_rgb; //读LCD ID模块 rd_id u_rd_id( .clk (sys_clk ), .rst_n (sys_rst_n), .lcd_rgb (lcd_rgb_i), .lcd_id (lcd_id ) ); //时钟分频模块 clk_div u_clk_div( .clk (sys_clk ), .rst_n (sys_rst_n), .lcd_id (lcd_id ), .lcd_pclk (lcd_pclk ) ); //LCD显示模块 lcd_display u_lcd_display( .lcd_pclk (lcd_pclk ), .rst_n (sys_rst_n ), .pixel_xpos (pixel_xpos), .pixel_ypos (pixel_ypos), .h_disp (h_disp ), .v_disp (v_disp ), .pixel_data (pixel_data) ); //LCD驱动模块 lcd_driver u_lcd_driver( .lcd_pclk (lcd_pclk ), .rst_n (sys_rst_n ), .lcd_id (lcd_id ), .pixel_data (pixel_data)
FPGA设计VGA接口显示字符Verilog设计Quartus工程源码文件,FPGA型号Cyclone4E系列中的EP4CE10F17C8,Quartus版本18.0。 module vga_char( input sys_clk, //系统时钟 input sys_rst_n, //复位信号 //VGA接口 output vga_hs, //行同步信号 output vga_vs, //场同步信号 output [15:0] vga_rgb //红绿蓝三原色输出 ); //wire define wire vga_clk_w; //PLL分频得到25Mhz时钟 wire locked_w; //PLL输出稳定信号 wire rst_n_w; //内部复位信号 wire [15:0] pixel_data_w; //像素点数据 wire [ 9:0] pixel_xpos_w; //像素点横坐标 wire [ 9:0] pixel_ypos_w; //像素点纵坐标 //***************************************************** //** main code //***************************************************** //待PLL输出稳定之后,停止复位 assign rst_n_w = sys_rst_n && locked_w; vga_pll u_vga_pll( //时钟分频模块 .inclk0 (sys_clk), .areset (~sys_rst_n), .c0 (vga_clk_w), //VGA时钟 25M .locked (locked_w) ); vga_driver u_vga_driver( .vga_clk (vga_clk_w), .sys_rst_n (rst_n_w), .vga_hs (vga_hs), .vga_vs (vga_vs), .vga_rgb (vga_rgb), .pixel_data (pixel_data_w), .pixel_xpos (pixel_xpos_w), .pixel_ypos (pixel_ypos_w) ); vga_display u_vga_display( .vga_clk (vga_clk_w), .sys_rst_n (rst_n_w), .pixel_xpos (pixel_xpos_w), .pixel_ypos (pixel_ypos_w), .pixel_data (pixel_data_w) ); endmodule
EPM240 CPLD最小系统串口开发板PDF原理图+Verilog测试Quartus工程源码,模块上电蜂鸣器响一声,3个LED灯闪烁 串口数据通信协议: 1、接收【控制32路GPIO输】 55 F1 01 (00-1F) FF 32路GPIO中的一路输出高 55 F1 08 (00-1F) FF 32路GPIO中的一路输出低 接收数据返回: AA AA BB CC DD 55 f1 01 01 ff 55 f1 08 01 ff 55 f1 01 02 ff 55 f1 08 02 ff 55 f1 01 03 ff 55 f1 08 03 ff `timescale 1ns/1ns module Uart_Ctrl_MD_top( clk, resetb, rs232_r1, rs232_t1, btl_set, bee_led, pwr_onoff ); input clk; input resetb; input rs232_r1; output rs232_t1; input btl_set; output[3:0] bee_led; output[31:0] pwr_onoff; //********************************************** wire serial_clk_16x; wire [2:0] rs232_rx_error; wire rs232_rx_data_ready; wire [7:0] rs232_rx_data; wire[2:0] m1_state; wire[15:0] usbkey_ctrl_data; wire write_flag; wire rs232_r1; wire rs232_t1; wire load_data; wire[7:0] data_out; wire load_request; wire[3:0] bee_led; wire[31:0] pwr_onoff; `define START_BITS 1 `define DATA_BITS 8 `define STOP_BITS 1 `define CLOCK_FACTOR 16
FPGA 读写SPI FLASH的Verilog逻辑源码Quartus工程文件+文档说明,由于 FPGA 是基于 SRAM 结构的,程序掉电后会丢失,所以需要一个外置 Flash 保存程序, FPGA 每次上电后去读取 Flash 中的配置程序,在 ALINX 开发板中,很多使用的是 SPI 接口的 nor flash,这种 flash 只需要 4 根 IO。FPGA 的配置 flash 是特殊的 IO,上电时工作,FPGA 要使用这些 IO 来读取 Flash,读取完成后释放这些 IO 交给用户使用。 本实验做一个 SPI 主设备控制器,然后按照 spi Flash 数据手册的命令要求发出擦除、编程、 读取等指令,每次上电后将 flash 中第一个字节读取并显示出来,按键按下时,数字加 1 再写回 flash。
FPGA读写SD卡Verilog设计逻辑Quartus工程源码文件,FPGA型号Cyclone4E系列中的EP4CE10F17C8,Quartus版本18.0。 module top_sd_rw( input sys_clk , //系统时钟 input sys_rst_n , //系统复位,低电平有效 //SD卡接口 input sd_miso , //SD卡SPI串行输入数据信号 output sd_clk , //SD卡SPI时钟信号 output sd_cs , //SD卡SPI片选信号 output sd_mosi , //SD卡SPI串行输出数据信号 //LED output [3:0] led //LED灯 ); //wire define wire clk_ref ; wire clk_ref_180deg ; wire rst_n ; wire locked ; wire wr_start_en ; //开始写SD卡数据信号 wire [31:0] wr_sec_addr ; //写数据扇区地址 wire [15:0] wr_data ; //写数据 wire rd_start_en ; //开始写SD卡数据信号 wire [31:0] rd_sec_addr ; //读数据扇区地址 wire error_flag ; //SD卡读写错误的标志 wire wr_busy ; //写数据忙信号 wire wr_req ; //写数据请求信号 wire rd_busy ; //读忙信号 wire rd_val_en ; //数据读取有效使能信号 wire [15:0] rd_val_data ; //读数据 wire sd_init_done ; //SD卡初始化完成信号 //***************************************************** //** main code //***************************************************** assign rst_n = sys_rst_n & locked; //锁相环 pll_clk u_pll_clk( .areset (1'b0 ), .inclk0 (sys_clk ), .c0 (clk_ref ), .c1 (clk_ref_180deg), .locked (locked ) ); //产生SD卡测试数据 data_gen u_data_gen( .clk (clk_ref), .rst_n (rst_n), .sd_init_done (sd_init_done), .wr_busy (wr_busy), .wr_req (wr_req), .wr_start_en (wr_start_en), .wr_sec_addr (wr_sec_addr), .wr_data (wr_data), .rd_val_en (rd_val_en), .rd_val_da
vga接口显示FPGA片内ram存储图片Verilog设计逻辑Quartus工程源码文件,图片存储在片内ROM中,并通过VGA在屏幕上显示,FPGA型号Cyclone4E系列中的EP4CE10F17C8,Quartus版本18.0。 module vga_rom_pic( input sys_clk, //系统时钟 input sys_rst_n, //复位信号 //VGA接口 output vga_hs, //行同步信号 output vga_vs, //场同步信号 output [15:0] vga_rgb //红绿蓝三原色输出 ); //wire define wire vga_clk_w; //PLL分频得到25Mhz时钟 wire locked_w; //PLL输出稳定信号 wire rst_n_w; //内部复位信号 wire [15:0] pixel_data_w; //像素点数据 wire [ 9:0] pixel_xpos_w; //像素点横坐标 wire [ 9:0] pixel_ypos_w; //像素点纵坐标 //***************************************************** //** main code //***************************************************** //待PLL输出稳定之后,停止复位 assign rst_n_w = sys_rst_n && locked_w; vga_pll u_vga_pll( //时钟分频模块 .inclk0 (sys_clk), .areset (~sys_rst_n), .c0 (vga_clk_w), //VGA时钟 25M .locked (locked_w) ); vga_driver u_vga_driver( .vga_clk (vga_clk_w), .sys_rst_n (rst_n_w), .vga_hs (vga_hs), .vga_vs (vga_vs), .vga_rgb (vga_rgb), .pixel_data (pixel_data_w), .pixel_xpos (pixel_xpos_w), .pixel_ypos (pixel_ypos_w) ); vga_display u_vga_display( .vga_clk (vga_clk_w), .sys_rst_n (rst_n_w), .pixel_xpos (pixel_xpos_w), .pixel_ypos (pixel_ypos_w), .pixel_data (pixel_data_w) ); endmodule
FPGA设计实现OV5640 摄像头采集数据VGA显示输出Verilog设计逻辑Quartus工程源码文件,FPGA型号Cyclone4E系列中的EP4CE10F17C8,Quartus版本18.0。 module ov5640_rgb565_1024x768_vga( input sys_clk , //系统时钟 input sys_rst_n , //系统复位,低电平有效 //摄像头接口 input cam_pclk , //cmos 数据像素时钟 input cam_vsync , //cmos 场同步信号 input cam_href , //cmos 行同步信号 input [7:0] cam_data , //cmos 数据 output cam_rst_n , //cmos 复位信号,低电平有效 output cam_pwdn , //cmos 电源休眠模式选择信号 output cam_scl , //cmos SCCB_SCL线 inout cam_sda , //cmos SCCB_SDA线 //SDRAM接口 output sdram_clk , //SDRAM 时钟 output sdram_cke , //SDRAM 时钟有效 output sdram_cs_n , //SDRAM 片选 output sdram_ras_n , //SDRAM 行有效 output sdram_cas_n , //SDRAM 列有效 output sdram_we_n , //SDRAM 写有效 output [1:0] sdram_ba , //SDRAM Bank地址 output [1:0] sdram_dqm , //SDRAM 数据掩码 output [12:0] sdram_addr , //SDRAM 地址 inout [15:0] sdram_data , //SDRAM 数据 //VGA接口 output vga_hs , //行同步信号 output vga_vs , //场同步信号 output [15:0] vga_rgb //红绿蓝三原色输出 ); //parameter define parameter SLAVE_ADDR = 7'h3c ; //OV5640的器件地址7'h3c parameter BIT_CTRL = 1'b1 ; //OV5640的字节地址为16位 0:8位 1:16位 parameter CLK_FREQ = 26'd65_000_000; //i2c_dri模块的驱动时钟频率 65MHz parameter I2C_FREQ = 18'd250_000 ; //I2C的SCL时钟频率,不超过400KHz parameter CMOS_H_PIXEL = 24'd1024 ; //CMOS水平方向像素个数,用于设置SDRAM缓存大小 parameter CMOS_V_PIXEL = 24'd768 ; //CMOS垂直方向像素个数,用于设置SDRAM缓存大小 //wire define wire clk_100m ; //100mhz时钟,SDRAM操作时钟 wire clk_100m_shift ; //100mhz时