8线-3线编码器 优先编码器+八选一数据选择器 FPGA设计Verilog逻辑源码Quartus工程文件, Quartus软件版本11.0, FPGA型号为CYCLONE4E系列中的EP4CE6E22C8,可以做为你的学习设计参考。 module yxbm_83(y,eo,gs,i,ei); input [7:0] i; //8位输入i input ei; //使能输入端ei output eo,gs; //使能输出端eo,优先标志端gs output[2:0] y; //3位输出y reg[2:0] y; //3位输出寄存器y reg eo,gs; //使能输出寄存器, always@(i,ei) //电平触发方式,当i跟ei有改变的时候,执行以下操作 begin if(ei==1'b1) //当ei为1的时候 begin y<=3'b111; gs<=1'b1; eo<=1'b1; end else begin if(i[7]==1'b0) //当i的第8为0时候 begin y<=3'b000; gs<=1'b0; eo<=1'b1; end else if(i[6]==1'b0) //当i的第七位为0时候 begin y<=3'b001; gs<=1'b0; eo<=1'b1; end else if(i[5]==1'b0) //当i的第6位为0时候 begin y<=3'b010; gs<=1'b0; eo<=1'b1; end else if(i[4]==1'b0) //当i的第5位为0时候 begin y<=3'b011; gs<=1'b0; eo<=1'b1; end else if(i[3]==1'b0) //当i的第4位为0时候 begin y<=3'b100; gs<=1'b0; eo<=1'b1; end else if(i[2]==1'b0) //当i的第3位为0时候 begin y<=3'b101; gs<=1'b0; eo<=1'b1; end else if(i[1]==1'b0) //当i的第2位为0时候 begin y<=3'b110; gs<=1'b0; eo<=1'b1; end
半整数分频1.5小数分频的功能 FPGA设计Verilog逻辑源码Quartus工程文件, Quartus软件版本11.0, FPGA型号为CYCLONE4E系列中的EP4CE6E22C8,可以做为你的学习设计参考。 module div_1_5(clk,div); input clk; //输入时钟信号 output div; //输出分频信号 reg count; //计数寄存器 reg div; //输出分频寄存器 reg clk_temp2,clk_temp3; //脉冲控制端2寄存器,脉冲控制端3寄存器 assign clk_temp1=clk^clk_temp2; //脉冲控制端1寄存器,等于clk与clk_temp2取异或运算 always@(posedge clk_temp1) //脉冲控制端的上升沿触发 begin if(count==1'b0) //判断count是否为0,是的话执行以下操作 begin count<=1'b1; //count置1 clk_temp3<=1'b1; //clk_temp3置1 div<=1'b1; //div置1 end else //否的话执行以下操作 begin count<=count-1'b1; //count自减1 clk_temp3<=1'b0; //clk_temp3置0 div<=1'b0; //div置0 end end
串行加法器4位全加器 FPGA设计Verilog逻辑源码Quartus工程文件, Quartus软件版本11.0, FPGA型号为CYCLONE4E系列中的EP4CE6E22C8,可以做为你的学习设计参考。 module add4(a,b,ci,s,co); input [3:0] a,b; //输入四位数据a,b input ci; //输入进位ci output [3:0] s; //输出四位数据 s output co; //输出进位co assign {co,s}=a+b+ci; //把a、b、ci相加后的结果赋予co、s,其中co放最高位,s放低三位
模为60的BCD码加法计数器FPGA设计Verilog逻辑源码Quartus工程文件, Quartus软件版本11.0, FPGA型号为CYCLONE4E系列中的EP4CE6E22C8,可以做为你的学习设计参考。 module cnt_60(clk,reset,cin,load,data,cout,qout); input clk,reset,cin,load; //输入时钟,复位,计数端,置数端 input[7:0] data; //预置数输入端 output cout; //输出进位信号端 output[7:0] qout; //计数输出端 reg[7:0] qout; //计数输出端寄存器 always@(posedge clk) //时钟上升沿触发 begin if(reset) //判断是否复位信号端为1 qout<=0; //计数输出端置0 else if(load) //判断置数端是否有效 qout<=data; //将预置数输入端数据赋予计数输出寄存器 else if(cin) //判断计数端是否有效 begin if(qout[3:0]==9) //判断qout的低位是否为9 begin qout[3:0]<=0; //qout低位清0 if(qout[7:4]==5) //判断qout高位是否为5 qout[7:4]<=0; //qout高位清0 else qout[7:4]<=qout[7:4]+4'b1; //高位自加1 end
LCD1602显示屏显示字符实验FPGA设计Verilog逻辑源码Quartus11.0工程文件,FPGA型号为CYCLONE4E系列中的EP4CE6E22C8,可以做为你的学习设计参考。 module my1602(clk,RS,RW,E,Data,back_light); input clk; //50MHZ时钟的输入 output RS,RW,E; //1602的控制信号使能,数据/命令,读/写 output [7:0]Data; //数据端 output back_light; //背光 reg RS; reg [7:0]Data; parameter address=8'h80; //第一行 parameter address2=8'hc0; //第二行 assign RW=1'b0; //只用显示时,一直是写的状态 assign back_light=1'b1; //背光灯打开 reg clk_e; reg [15:0]count; always @(posedge clk) begin count=count+1'b1; if(count==16'hf000) begin clk_e=~clk_e; //作为使能端 count=16'd0; end end reg [1:0]jishu; reg [4:0]zhuangtai; //状态机状态 reg temp; always @(posedge clk_e) begin case(zhuangtai) 5'b00000:begin temp<=1'b0; RS<=1'b0; Data<=8'h38;//显示模式设置 zhuangtai<=zhuangtai+1'b1; end 5'b00001:begin RS<=1'b0; Data<=8'h0c;//显示开及光标设置 zhuangtai<=zhuangtai+1'b1; end 5'b00010:begin RS<=1'b0; Data<=8'h06;//显示光标移动设置 zhuangtai<=zhuangtai+1'b1; end 5'b00011:begin RS<=1'b0; Data<=8'h01;//显示
同步十位减法计数器Cyclone4E FPGA设计Verilog逻辑源码Quartus工程文件, Quartus软件版本11.0, FPGA型号为CYCLONE4E系列中的EP4CE6E22C8,可以做为你的学习设计参考。 module cnt_jf(clk,rst,q); input clk; //输入时钟 input rst; //输入复位信号,高电平有效 output[3:0] q; //输出计数端 reg[3:0] q; //输出计数端寄存器 always@(posedge clk) //时钟上升沿触发 begin if(rst) //判断rst是否有效 begin q<=0; //q清零 end else if(q==4'b0000) //q是否等于0 begin q<=4'b1001; //q置9 end else begin q<=q-4'b1; //q自减1
占空比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;//十位清零