占空比1:1的2、4、8分频 偶数分频Cyclone4E FPGA设计Verilog逻辑源码Quartus工程文件, Quartus软件版本11.0, FPGA型号为CYCLONE4E系列中的EP4CE6E22C8,可以做为你的学习设计参考。 module fengping_1(clk_50M,f_2,f_4,f_8); input clk_50M; //输入时钟,50M,周期为20ns output f_2,f_4,f_8; //输出分频时钟,分别为2分频,4分频,8分频 reg f_2,f_4,f_8; //输出分频寄存器 reg[2:0] cnt; //计数寄存器 always@(posedge clk_50M) //在每个时钟的上升沿触发,执行begin_end里面的语句 begin cnt<=cnt+3'b1; //每个时钟周期计数寄存器自加一 f_2<=cnt[0]; //把计数寄存器的最低位赋予f_2,输出即使2分频 f_4<=cnt[1]; //把计数寄存器的第2位赋予f_4,输出即使4分频
PWM波实验FPGA设计Verilog逻辑源码Quartus11.0工程文件,FPGA型号为CYCLONE4E系列中的EP4CE6E22C8,可以做为你的学习设计参考。 module pwm(clk,reset,key,led); input clk,reset,key; output led; reg pwm_out; reg key_out; parameter s0=2'b00,s1=2'b01,s2=2'b10,s3=2'b11; reg [1:0] state; reg [31:0] clk_counter; reg [9:0] pwm_counter; reg flag; /******************按键消抖**************************/ always @(posedge clk) begin case (state) s0: begin key_out<=1'b1; if(key==1'b0) state<=s1; else state<=s0; end s1: begin if(key==1'b0) state<=s2; else state<=s0; end s2: begin if(key==1'b0) state<=s3; else state<=s0; end s3: begin if(key==1'b0) begin key_out<=1'b0; state<=s3; end else begin key_out<=1'b1; state<=s0; end end default: state<=s0; endcase end always @(posedge clk) begin clk_counter<=clk_counter+1'b1; if (clk_counter[13:4]
UART串口通信_FPGA和上位机通信实验FPGA设计Verilog逻辑源码Quartus11.0工程文件. 功能描述:串口通信__FPGA和上位机通信(波特率:9600bps,10个bit是1位起始位,8个数据位,1个结束) ** 操作过程:按动key2,FPGA向PC发送“da xi gua"一次,KEY1是复位按键。 ** 字符串(串口调试工具设成字符格式接受和发送方式),FPGA接受(0到9)后显示在7段数码管上。 module uart(clk,rst,rxd,txd,en,seg_data,key_input); input clk,rst; input rxd; //串行数据接收端 input key_input; //按键输入 output[7:0] en; output[7:0] seg_data; reg[7:0] seg_data; output txd; //串行数据发送端 ////////////////////inner reg//////////////////// reg[15:0] div_reg; //分频计数器,分频值由波特率决定。分频后得到频率8倍波特率的时钟 reg[2:0] div8_tras_reg; //该寄存器的计数值对应发送时当前位于的时隙数 reg[2:0] div8_rec_reg; //该寄存器的计数值对应接收时当前位于的时隙数 reg[3:0] state_tras; //发送状态寄存器 reg[3:0] state_rec; //接受状态寄存器 reg clkbaud_tras; //以波特率为频率的发送使能信号 reg clkbaud_rec; //以波特率为频率的接受使能信号 reg clkbaud8x; //以8倍波特率为频率的时钟,它的作用是将发送或接受一个bit的时钟周期分为8个时隙 reg recstart; //开始发送标志 reg recstart_tmp; reg trasstart; //开始接受标志 reg rxd_reg1; //接收寄存器1 reg rxd_reg2; //接收寄存器2,因为接收数据为异步信号,故用两级缓存 reg txd_reg; //发送寄存器 reg[7:0] rxd_buf; //接受数据缓存 reg[7:0] txd_buf; //发送数据缓存 reg[2:0] send_state; //这是发送状态寄存器 reg[19:0] cnt_delay; //延时去抖计数器 reg start_delaycnt; //开始延时计数标志 reg key_entry1,key_entry2; //确定有键按下标志 //////////////////////////////////////////////// parameter div_par=16'h145; //分频参数,其值由对应的波特率计算而得,按此参数分频的时钟频率是波倍特率的8 //倍,此处值对应9600的波特率,即分频出的时钟频率是9600*8 (CLK 50M) //////////////////////////////////////////////// assign txd=txd_reg; //assign lowbit=0; assign en=0; //7段数码管使能信号赋值 always@(posedge clk ) begin if(!rst) begin cnt_delay<=0; start_delaycnt<=0; end else if(start_delaycnt) begin if(cnt_delay!=20'd800000) begin cnt_delay<=cnt_delay+1'b1; end else begin cnt_delay<=0;
按键计数将结果通过8段数码管显示FPGA设计Verilog逻辑源码Quartus11.0工程文件,FPGA型号为CYCLONE4E系列中的EP4CE6E22C8,可以做为你的学习设计参考。 module key_counter(clk,key,reset,seg_duan,seg_wei); input clk,key,reset; output [7:0] seg_duan; output [2:0] seg_wei; wire clk,key,reset; reg [7:0] seg_duan;//数码管段选 reg [2:0] seg_wei;//数码管位选 reg key_out; parameter s0=2'b00,s1=2'b01,s2=2'b10,s3=2'b11; reg [1:0] state; reg [3:0] key_counter_ge;//按键计数个位 reg [3:0] key_counter_shi;//按键计数十位 reg [3:0] key_counter_bai;//按键计数百位 reg [9:0] div_count;//数码管扫描时钟分频计数 reg clk_scan;//位选时钟 reg [1:0] wei_select;//位选信号 /****************************按键消抖**********************************/ always @(posedge clk) begin case (state) s0: begin key_out<=1'b1; if(key==1'b0) state<=s1; else state<=s0; end s1: begin if(key==1'b0) state<=s2; else state<=s0; end s2: begin if(key==1'b0) state<=s3; else state<=s0; end s3: begin if(key==1'b0) begin key_out<=1'b0; state<=s3; end else begin key_out<=1'b1; state<=s0; end end default: state<=s0; endcase end /****************************按键计数**********************************/ always @(negedge key_out or negedge reset) begin if(!reset) begin key_counter_ge <=4'd0; key_counter_shi<=4'd0; key_counter_bai<=4'd0; end else begin if(!key_out)//判断按键是否按下 begin key_counter_ge<=key_counter_ge+1'b1;//按键计数个位加一 if(key_counter_ge==4'd9) begin key_counter_ge<=4'd0;//个位清零 key_counter_shi<=key_counter_shi+1'b1;//按键计数十位加一 if(key_counter_shi==4'd9) begin key_counter_shi<=4'd0;//十位清零
Cyclone4E FPGA设计4位并入串出移位寄存器Verilog逻辑源码Quartus工程文件.。Quartus11.0工程文件, FPGA型号为CYCLONE4E系列中的EP4CE6E22C8,可以做为你的学习设计参考。 **----------------------------文件信息-------------------------- ** 文件名称: reg_bc.v ** 创建日期: ** 功能描述:实现4位并入串出移位寄存器的功能 ** 硬件平台:大西瓜logic^3 FPGA开发板 ** 版权声明:本代码属个人知识产权,本代码仅供交流学习. **---------------------------修改文件的相关信息---------------- ** 修改人: ** 修改日期: ** 修改内容: *******************************************************************************/ module reg_bc(clk,clr,din,dout); input clk,clr; //输入时钟端,清零端(高电平有效) input[3:0] din; //数据输入端 output dout; //数据输出端 reg[1:0] cnt; reg[3:0] q; reg dout; always@(posedge clk) //时钟上升沿触发 begin cnt<=cnt+1; //cnt自加1 if(clr) //判断清零信号是否有效 begin q0) //判断cnt是否大于0 begin
无置数端+有置数端可变模计数器Cyclone4E FPGA设计Verilog逻辑源码Quartus工程文件, Quartus软件版本11.0, FPGA型号为CYCLONE4E系列中的EP4CE6E22C8,可以做为你的学习设计参考。 module cnt_kb_1(clk,clr,m,q); input clk,clr; //输入时钟,清零端(1有效) input[6:0] m; //模值输入端,m只能由小到大变化,否则出错 output[6:0] q; //计数输出端 reg[6:0] q; //计数输出端寄存器 reg[6:0] md; //7位md寄存器 always@(posedge clk) //时钟上升沿触发 begin md<=m-7'b1; //将m减1赋予md if(clr) //判断clr是否有效 begin q<=0; //q清零 end else //当清零端无效时候 if(q==md) //判断q是否等于
占空比1:4的5分频奇数分频Cyclone4E FPGA设计Verilog逻辑源码Quartus工程文件, Quartus软件版本11.0, FPGA型号为CYCLONE4E系列中的EP4CE6E22C8,可以做为你的学习设计参考。 module f_14(clk_50M,f_14); input clk_50M; //输入时钟,50M,20ns output f_14; //输出5分频,占空比为1:4 reg f_14; //分频寄存器 reg[2:0] cnt; //计数寄存器 always@(posedge clk_50M) //在每个时钟的上升沿触发 begin if(cnt==3'b100) //当cnt为4的时候,执行以下程序 begin f_14<=1'b1; //f_14置1 cnt<=3'b0; //cnt清0 end else begin cnt<=cnt+3'b1; //cnt自加1 f_14<=1'b0; //f_14置0
同步4位可逆计数器Cyclone4E FPGA设计Verilog逻辑源码Quartus工程文件, Quartus软件版本11.0, FPGA型号为CYCLONE4E系列中的EP4CE6E22C8,可以做为你的学习设计参考。 module cnt_kn(clk,clr,s,en,updn,d,co,q); input clk,clr,s,en,updn; //输入时钟、清零端(高电平有效)、置数端(高电平有效)、使能端、计数器方向控制端 input[3:0] d; //预置数据端 output[3:0] q; //计数输出端 output co; //进位端 reg[3:0] q; //计数输出寄存器 reg co; //进位输出寄存器 always@(posedge clk) //时钟上升沿触发 begin if(clr) //判断清零端是否有效 begin q<=0; //q置0 end else begin if(s) //判断置数端是否有效 begin q<=d; //q置d中的数据 end else if(en) //判断使能端是否有效 begin if(updn) //判断方向寄存器是否为1 begin if(q==4'b1111) //判断q是否为15 begin q<=4'b0000; //q清0 co<=1; //co置1 end else //q还没到15 begin q<=q+1; //q自加1 co<=0; //co置0
同步24进制计数器FPGA设计Verilog逻辑源码Quartus工程文件, Quartus软件版本11.0, FPGA型号为CYCLONE4E系列中的EP4CE6E22C8,可以做为你的学习设计参考。 module cnt_24(ten,one,co,clk,clr); input clk; //输入时钟 input clr; //清零输入端 output co; //进位输出端 output[3:0] ten,one; //十位输出,个位输出 reg co; //进位输出端寄存器 reg[3:0] ten,one; //十位输出寄存器,个位输出寄存器 always@(posedge clk) //时钟上升沿触发 begin if(clr) //判断清零信号是否有效,即为1 begin ten<=0; //十位清零 one<=0; //个位清零 end else begin if({ten,one}==8'b00100011) //判断是否计数到23 begin ten<=0; //十位清零 one<=0; //个位清零 co<=1; //进位置1 end else if(one==4'b1001) //判断各位是否为9 begin one<=0; //是的话个位置0 ten<=ten+4'b1; //十位自加1 co<=0; //进位置0 end else
cyclone4 FPGA读写8位AD转换器TLC549实验Verilog逻辑源码Quartus11.0工程文件, FPGA型号为EP4CE6E22C8,可以做为你的学习设计参考。 ( clk, //系统50MHZ时钟 adc_sclk, //AD TLC549的时钟 data, //AD TLC549的数据口 cs, //AD TLC549的片选择 wei, //数码管的为选择 duan //数码管的7段码 ); input clk; input data; output cs; output adc_sclk; output[7:0] duan; output[3:0] wei; reg cs,adc_sclk,clk1k,clk1ms; reg[15:0] count; reg[24:0] count1ms; reg[3:0] cnt; reg[2:0] number; reg[1:0] state; reg[3:0] wei; reg ledcs; reg [7:0] duan; reg[7:0] dataout; reg[16:0] tenvalue; parameter sample=2'b00, display=2'b01; /**********产生100k的采集时钟信号*********/ always@(posedge clk) begin if(count<=250) count<=count+1'b1; else begin count<=0; adc_sclk25'd25000) begin clk1ms<=~clk1ms; count1ms<=0; end else count1ms<=count1ms+1; end /*********AD采样程序**************/ always@(negedge adc_sclk) begin case(state) sample: begin cs<=0; dataout[7:0]4'd7) begin cnt<=0; state<=display; end else begin cnt<=cnt+1; state<=sample; end end display: begin cs<=1;//关AD片选 tenvalue>4)&8'b0000_1111)*16+ tendata(dataout&8'b0000_1111))*129;// //得到采集的数据 state<=sample; end default: state<=display; endcase end /***********2进制转十进制函数*************/ function[7:0] tendata;//返回一个4位的数字 input[7:0] datain; begin case(datain) 4'b00000000: tendata=4'd0;//0 4'b00000001: te