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"
基于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
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]
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
一些基本的FPGA设计及其仿真实例基于VERILOG 一些基本的FPGA设计及其仿真实例基于VERILOG
1
全球定位系统(Global Positioning System,GPS)能够向全球范围内的用户提供全天候的高精度导航、定位和授时服务,在军用和民用领域得到了广泛的应用。以GPS系统的测距码粗码C/A码为研究对象,在深入研究C/A码信号生成原理的基础上,利用Matlab中的Simulink对C/A码信号的生成进行了建模、仿真和分析,并利用FPGA设计并实现了C/A码发生器,详细说明了C/A码生成的设计原理,对其中的关键模块进行了设计和分析,给出了具体实现方案,同时阐述整个应用程序的流程,设计采用抽头选择控制端设置产生不同GPS卫星号的C/A码,最终仿真进一步验证了其结果的正确性,它可以产生任意GPS卫星号的C/A码,设计中采用VHDL语言实现的C/A码程序,可应用于基于FPGA的GPS接收机设计中,对研究我国的北斗导航系统接收机有一定的借鉴意义。
2021-11-25 21:56:50 796KB &nbsp;全球定位系统 FPGA C/A码 Matlab
1
基于CYCLONE fpga设计的会议发言限时器quartus工程源码+说明文档资料 module time_clock( clk, reset_n, hour_select_key, second_counter_key, second_countdown_key, pause_key, duan, wei ); input clk; //clk:50MHZ时钟输入; input reset_n; //复位信号输入,低电平有效; input hour_select_key; //12、24小时可以调节按键,当为‘1’时为24,‘0’时为12小时; input second_counter_key; //当该按键为‘1’时为秒表计时功能,‘0’时为正常功能; input second_countdown_key; //当该按键为‘1’时为倒计时功能,‘0’时为正常功能; input pause_key; //暂停功能按键,进行秒表计时和倒计时时可以通过该按键进行暂停,‘1’暂停,‘0’继续 output [7:0] duan; //duan:数码管段码; output [7:0] wei; //wei:数码管位码; reg [7:0] duan; //duan:数码管段码; reg [7:0] wei; //wei:数码管位码; reg [24:0] count; //1HZ时钟计数器 reg [13:0] count2; //扫描时钟计数器 reg clk_1hz; //1HZ时钟信号 reg [3:0] miao_ge; //秒个位数BCD码 reg [2:0] miao_shi; //秒十位BCD二进制码 reg [3:0] fen_ge; //分钟个位数 reg [2:0] fen_shi; //分钟十位数 reg [1:0] shi_ge; //时钟个位数 reg [1:0] shi_shi; //时钟十位数 reg [1:0] shi_select_ge; //时钟选择个位数,用于调节时制 reg [1:0] shi_select_shi; //时钟选择十位数,用于调节时制 reg clk_scan; //数码管扫描时钟 reg [2:0] select; //用于扫描时选择显示位码 //**************************************************************************************************** // 模块名称:秒时钟分频模块 // 功能描述: //*****************************************************************
FPGA设计+实战演练(逻辑篇) 共5卷
2021-11-22 19:46:10 55MB FPGA设计 实战 逻辑
1
该设计主要负责实现基于GSM 标准的多载波数字下变频(DDC)和数字上变频(DUC),DDC 接收数字中频信号,输出数据通过CPRI接口传输给数字基带进行处理,数字基带通过CPRI就口把数据传输给DUC模块,把基带信号频谱搬移到数字中频,输出给DA。 本文描述DDC & DUC 的逻辑设计的详细说明,定义各个模块所需要完成的功能,各个模块的接口,及用户需要配置的各个寄存器进行说明。 该参考设计的目标器件是:LFE2M100E-7F900CES。
2021-11-13 16:48:18 402KB DUC DDC 数字变频 FPGA
1