设计实现MIPS单周期CPU 用Verilog语言设计实现
2021-12-29 00:07:25 2.98MB CPU
1
EDA序列信号发生和检测器设计实验程序,用Verilog语言设计的,下载到实验仪器测试成功
2021-12-20 09:40:12 18KB EDA Verilog
1
乒乓球游戏机Verilog设计,亲测可以使用 乒乓球游戏机Verilog设计,亲测可以使用 乒乓球游
2021-12-20 08:59:57 1.48MB 乒乓球
1
MIT电子琴设计Verilog,利用开发板实现对电子琴的设计。麻省理工学院课程大作业要求。包含详细过程和完整代码,全英文。
2021-12-16 20:13:36 621KB Verilog
1
FPGA控制PS2键盘verilog设计Quartus9.1工程源码+设计说明文件,可以做为你的学习设计参考。 1. 这个实例通过开发板上面的PS/2接口接收键盘输入的数据,在LCD上面显示出来; 2. 工程在project文件夹里面,打开工程; 3. 源文件在rtl文件夹里面; module top(clk_in, data, lcd_e, lcd_rs, lcd_rw, led, ps2ck, ps2dk); input clk_in; output [7:0] data; output lcd_e; output lcd_rs; output lcd_rw; output [7:0] led; inout ps2ck; inout ps2dk; wire XLXN_4; wire XLXN_5; wire XLXN_6; reg clk; assign rst = 1'b1; always@(posedge clk_in) clk <= ~clk; div_256 XLXI_1 (.mclk(clk), .reset(rst), .clk(XLXN_6)); div16 XLXI_2 (.clk(clk), .rst(rst), .clk_16(XLXN_5)); lcd XLXI_3 (.clk(XLXN_5), .data_in(led[7:0]), .rst(XLXN_4), .data(data[7:0]), .lcd_e(lcd_e), .lcd_rs(lcd_rs), .lcd_rw(lcd_rw)); ps2_keyboard_interface XLXI_4 (.clk(XLXN_6), .reset(rst), .rx_read(), .tx_data(), .tx_write(), .rx_ascii(led[7:0]), .rx_data_ready(), .rx_extended(), .rx_released(XLXN_4), .rx_scan_code(), .rx_shift_key_on(), .tx_error_no_keyboard_ack(), .tx_write_ack_o(), .ps2_clk(ps2ck), .ps2_data(ps2dk)); endmodule
16位乘法器芯片verilog设计实验Quartus9.1工程源码+设计说明文件,可以做为的学习实验设计参考。 module mux16( clk,rst_n, start,ain,bin,yout,done ); input clk; //芯片的时钟信号。 input rst_n; //低电平复位、清零信号。定义为0表示芯片复位;定义为1表示复位信号无效。 input start; //芯片使能信号。定义为0表示信号无效;定义为1表示芯片读入输入管脚得乘数和被乘数,并将乘积复位清零。 input[15:0] ain; //输入a(被乘数),其数据位宽为16bit. input[15:0] bin; //输入b(乘数),其数据位宽为16bit. output[31:0] yout; //乘积输出,其数据位宽为32bit. output done; //芯片输出标志信号。定义为1表示乘法运算完成. reg[15:0] areg; //乘数a寄存器 reg[15:0] breg; //乘数b寄存器 reg[31:0] yout_r; //乘积寄存器 reg done_r; reg[4:0] i; //移位次数寄存器 always@(posedge clk) begin if(!rst_n) begin areg <= 16'h0000; breg <= 16'h0000; done_r <= 1'b0; yout_r <= 32'h00000000; i <= 5'd0; end else if(start) //启动运算 begin if(i < 5'd21) i <= i+1'b1; if(i == 5'd0) begin //锁存乘数、被乘数 areg <= ain; breg 5'd0 && i < 5'd16) begin if(areg[i-1]) yout_r = {1'b0,yout[30:15]+breg,yout_r[14:1]}; //累加并移位 else yout_r >1; //移位不累加 end else if(i == 5'd16 && areg[15]) yout_r[31:16] <= yout_r[31:16]+breg; //累加不移位 else if(i == 5'd18) done_r <= 1'b1; //乘完成标志位置位 else if(i == 5'd20) done_r <= 1'b0; //乘完成标志位清除 end else i <= 5'd0; end assign done = done_r; assign yout = yout_r;
FPGA 读写SRAM存储verilog设计实验Quartus9.1工程源码+设计说明文件,可以做为你的学习设计参考。 module sram_test( clk,rst_n,led, sram_addr,sram_wr_n,sram_data ); input clk; // 50MHz input rst_n; //低电平复位 output led; // LED1 // FPGA与SRAM外部接口 output[17:0] sram_addr; // SRAM地址总线 output sram_wr_n; // SRAM写选通 inout[15:0] sram_data; // SRAM数据总线 //------------------------------------------------------- reg[25:0] delay; //延时计数器 always @ (posedge clk or negedge rst_n) if(!rst_n) delay <= 26'd0; else delay <= delay+1; //不断计数,周期约为1.28s //------------------------------------------------------- reg[15:0] wr_data; // SRAM写入数据总线 reg[15:0] rd_data; // SRAM读出数据 reg[17:0] addr_r; // SRAM地址总线 wire sram_wr_req; // SRAM写请求信号 wire sram_rd_req; // SRAM读请求信号 reg led_r; // LED寄存器 assign sram_wr_req = (delay == 26'd9999); //产生写请求信号 assign sram_rd_req = (delay == 26'd19999); //产生读请求信号 always @ (posedge clk or negedge rst_n) if(!rst_n) wr_data <= 16'd0; else if(delay == 26'd29999) wr_data <= wr_data+1'b1; //写入数据每1.28s自增1 always @ (posedge clk or negedge rst_n) if(!rst_n) addr_r <= 18'd0; else if(delay == 26'd29999) addr_r <= addr_r+1'b1; //写入地址每1.28s自增1 always @ (posedge clk or negedge rst_n) if(!rst_n) led_r <= 1'b0; else if(delay == 26'd20099) begin //每1.28s比较一次同一地址写入和读出的数据 if(wr_data == rd_data) led_r <= 1'b1; //写入和读出数据一致,LED点亮 else led_r <= 1'b0; //写入和读出数据不同,LED熄灭 end assign led = led_r; //------------------------------------------------------- `define DELAY_80NS (cnt==3'd7) reg[2:0] cnt; //延时计数器 always @ (posedge clk or negedge rst_n) if(!rst_n) cnt <= 3'd0; else if(cstate == IDLE) cnt <= 3'd0; else cnt <= cnt+1'b1; //------------------------------------ parameter IDLE = 4'd0, WRT0 = 4'd1, WRT1 = 4'd2, REA0 = 4'd3, REA1 = 4'd4; reg[3:0] cstate,nstate; always @ (posedge clk or negedge rst_n) if(!rst_n) cstate <= IDLE; else cstate <= nstate; always @ (cstate or sram_wr_req or sram_rd_req or cnt) case (cstate) IDLE: if(sram_wr_req) nstate <= WRT0
IIC读写24C02存储verilog实验Quartus9.1工程源码,可以做为你的学习设计参考。 module iic_top( clk,rst_n, sw1,sw2, scl,sda, sm_cs1_n,sm_cs2_n,sm_db ); input clk; // 50MHz input rst_n; //复位信号,低有效 input sw1,sw2; //按键1、2,(1按下执行写入操作,2按下执行读操作) output scl; // 24C02的时钟端口 inout sda; // 24C02的数据端口 output sm_cs1_n,sm_cs2_n; //数码管片选信号,低有效 output[6:0] sm_db; //7段数码管(不包括小数点) wire[7:0] dis_data; //在数码管上显示的16进制数 iic_com iic_com( .clk(clk), .rst_n(rst_n), .sw1(sw1), .sw2(sw2), .scl(scl), .sda(sda), .dis_data(dis_data) ); led_seg7 led_seg7( .clk(clk), .rst_n(rst_n), .dis_data(dis_data), .sm_cs1_n(sm_cs1_n), .sm_cs2_n(sm_cs2_n), .sm_db(sm_db) ); endmodule module iic_com( clk,rst_n, sw1,sw2, scl,sda, dis_data ); input clk; // 50MHz input rst_n; //复位信号,低有效 input sw1,sw2; //按键1、2,(1按下执行写入操作,2按下执行读操作) output scl; // 24C02的时钟端口 inout sda; // 24C02的数据端口 output[7:0] dis_data; //数码管显示的数据 //-------------------------------------------- //按键检测 reg sw1_r,sw2_r; //键值锁存寄存器,每20ms检测一次键值 reg[19:0] cnt_20ms; //20ms计数寄存器 always @ (posedge clk or negedge rst_n) if(!rst_n) cnt_20ms <= 20'd0; else cnt_20ms <= cnt_20ms+1'b1; //不断计数 always @ (posedge clk or negedge rst_n) if(!rst_n) begin sw1_r <= 1'b1; //键值寄存器复位,没有键盘按下时键值都为1 sw2_r <= 1'b1; end else if(cnt_20ms == 20'hfffff) begin sw1_r <= sw1; //按键1值锁存 sw2_r <= sw2; //按键2值锁存 end //--------------------------------------------- //分频部分 reg[2:0] cnt; // cnt=0:scl上升沿,cnt=1:scl高电平中间,cnt=2:scl下降沿,cnt=3:scl低电平中间 reg[8:0] cnt_delay; //500循环计数,产生iic所需要的时钟 reg scl_r; //时钟脉冲寄存器 always @ (posedge clk or negedge rst_n) if(!rst_n) cnt_delay <= 9'd0; else if(cnt_delay == 9'd499) cnt_delay <= 9'd0; //计数到10us为scl的周期,即100KHz else cnt_delay <= cnt_delay+1'b1; //时钟计数 always @ (posedge clk or neged
FPGA读写DS18B20温度并通过七段数码管显示verilog设计实验Quartus9.1工程源码,可以做为你的学习设计参考。 /ds18b20_seg7.v //---------------------------------------- module ds18b20_seg7( input CLOCK_50, // 板载50MHz时钟 input Q_KEY, // 板载按键RST // inout DS18B20, // output [7:0] SEG7_SEG, // 七段数码管 段脚 output [7:0] SEG7_SEL // 七段数码管 待译位脚 ); //++++++++++++++++++++++++++++++++++++++ // 获取温度值开始 //++++++++++++++++++++++++++++++++++++++ wire [15:0] t_buf; ds18b20_drive ds18b20_u0( .clk(CLOCK_50), .rst_n(Q_KEY), // .one_wire(DS18B20), // .temperature(t_buf) ); //------------------------------------- // 获取温度值 结束 //------------------------------------- //+++++++++++++++++++++++++++++++++++++ // 显示键盘值 开始 //+++++++++++++++++++++++++++++++++++++ seg7x8_drive seg7_u0( .i_clk (CLOCK_50), .i_rst_n (Q_KEY), .i_turn_off (8'b1110_1000), // 熄灭位[2进制] .i_dp (8'b0000_0010), // 小数点位[2进制] // 欲显数据[16进制] // 正负位 空白 十位 个位 小数位 .i_data ({12'h0, t_buf[15:12], 4'h0, t_buf[11:0]}), .o_seg (SEG7_SEG), .o_sel (SEG7_SEL) ); //------------------------------------- // 显示键盘值 结束 //------------------------------------- endmodule
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