基于DAC TLC5615 +ADC tlc549芯片+VGA显示的简易数字示波器实验FPGA设计Verilog源码Quartus18.0工程文件,利用AD、DA和VGA三个外设来实现简易示波器,DA外设发送正弦波给AD外设,AD外设解析成数字信号将数据送给VGA外设进行显示。在VGA上可以看到DA外设发送的波形、波形频率和波形峰峰值。 module Oscilloscope_Top ( //时钟和复位端口 CLK_50M,RST_N, //拨码开关端口 SWITCH, //AD外设端口 AD_CS,AD_CLK,AD_DATA, //DA外设端口 DA_CLK,DA_DIN,DA_CS, //VGA外设端口 VGA_HSYNC,VGA_VSYNC,VGA_DATA ); //--------------------------------------------------------------------------- //-- 外部端口声明 //----------------------------------------------------
实现spi slave收发 从dsp获取读写指令,地址信息,写入数据到指定地址,或者读取地址数据发回dsp 地址位宽可调整,每次读写一个byte数据 游戏之作,希望大家喜欢
2022-03-22 12:43:57 3KB spi slave verilog
1
利用Verilog语言实现PID增量式控制,输出占空比
2022-03-13 19:24:04 2KB FPGAverilog 增量式pid pidverilog pid
完整的卡尔曼滤波算法,用Verilog代码编写,对初学者学习有帮助,欢迎下载
2022-03-11 22:13:42 6.77MB Kalmanfilter amsyk 卡尔曼滤波 verilog
8051的开源verilog代码,可用于内核研究
2022-01-31 23:30:47 652KB 8051 oc8051 verilog
1
中南大学 电子信息工程专业 EDA课程设计指导书及源代码,设计内容:基于verilog HDL 16位RISC CPU设计与仿真,采用5级流水线。开发工具:quartusII, modelsim
2021-12-30 10:14:10 971KB 中南大学 EDA课程设计 cpu verilog源码
1
基于FPGA设计的智能电梯控制器设计WORD文档+quartus13.0工程Verilog源码文件,可以做为你的课程设计参考。 1.1 设计要求 ① 楼层的高度大于等于6,根据降低运行成本的原则,设计并实现一个以方向优先电梯调度算法。 ②要求能够使用按键模拟对电梯的控制,为了便于观察,将电梯所在的楼层(1~6)用数码管显示出来,将电梯的上下楼状态(上,下,开门,关门,静止)用发光管或数码管显示出来,并且能够实现对电梯实现锁定禁止运行。 ③ 画出电梯控制器的状态机,写出状态编码方案。 ④ 用Verilog语言对设计进行描述,并下载到实验板上调试成功,适当增加比较符合现实的控制限制。 ⑤ 写出设计性实验报告,并打印各层次的源文件和仿真波形,然后作简要说明。 并谈谈此次实验的收获、感想及建议 1.2 设计思路 我把电梯的状态分为三种:上升、下降、停留(其中包括开门、关门、禁止),状态分别编码为00、01、10来识别。楼层设计为六层,一般的电梯在每层外面都有上下请求的按钮,还有电梯内部的一楼到六楼的请求,以及持续开门、关门的请求。我们可以通过按键的输入对各种变量进行赋值,代表不同的请求,然后用case语句分各个楼层进行条件判断,每层分为两大块的响应,即本层有无需求,若有需求,则进行开门动作,若无需求,则分上升的状态和下降和停留的状态,分别又有不同的请求(除第一层和第六层特殊,只有上升的或下降的请求),上升下降分别作不同的响应(主要对i值进行变化)即可 输入主要用按键实现(六个楼层加向上向下两个,共八个),电梯的状态分为4种,上升,下降,停留,禁止分别用4个LED灯来表示,用数码管显示电梯所在楼层。对电梯的锁定操作,是同时按上下两个按键,电梯锁定的操作是电梯自动回到一楼,并对请求无任何响应。 之后对该系统进行了改进,对于开门与关门的区别,我采用LCD显示,主要是对停留状态进行进一步分解,停留时对LCD显示进行控制,从而显示开门关门状态。 module dianti(ledup,leddown,ledforbid,ledstay,A,B,c1,c2,c3,c4,c5,c6,clock,out,LCD_DATA,LCD_EN, LCD_RS, LCD_RW, LCD_ON, LCD_BLON,test); output ledup,leddown,ledstay,ledforbid; output [6:0]out; output LCD_EN, LCD_RS, LCD_RW, LCD_ON, LCD_BLON; output [1:0]test;//用于测试开门关门状态 input A,B,clock,c1,c2,c3,c4,c5,c6; inout [7:0]LCD_DATA; //.输入输出变量的声明 reg [4:0] floor1; reg [5:1] floor2; reg [5:0] floor3; reg [3:0] i; reg [1:0] s; reg [6:0]out; reg [3:0]t; reg [1:0]control; //寄存器变量 wire clk_out;//分频后的输出时钟 wire [1:0]test; reg ledup,leddown,ledforbid,ledstay; assign test=control; Clock c(clock,clk_out); //分频 LCD d(clock,control,LCD_DATA,LCD_EN, LCD_RS, LCD_RW, LCD_ON, LCD_BLON);//LCD显示 always @(posedge clk_out) begin t<=t+4'b0001; ledup<=(s==2'b01 &&!(A==1 && B==1) ); //电梯上升中 leddown<=(s==2'b10 &&!(A==1 && B==1));//电梯下降中 ledforbid<=(A==1 && B==1);// 电梯处于锁定 ledstay<=(s==2'b00&&!(A==1 && B==1));//电梯停留 if( A==1 && B==0) begin // request up if(c5==1) floor1[4]<=1; if(c4==1) floor1[3]<=1; if(c3==1) floor1[2]<=1;
Cyclone10 FPGA读写MP25P16 spiflash实验Verilog源码Quartus17.1工程文件+文档资料,, FPGA为CYCLONE10LP系列中的10CL025YU256C8. 完整的Quartus工程文件,可以做为你的学习设计参考。 module spi_flash_top( input sys_clk, input rst, output nCS, output DCLK, output MOSI, input MISO, input[15:0] clk_div, input[3:0] cmd, input cmd_valid, output cmd_ack, input[23:0] addr, input[7:0] data_in, input[8:0] size, output data_req, output reg[7:0] data_out, output reg data_valid ); localparam S_IDLE = 0; localparam S_SE = 1; localparam S_BE = 2; localparam S_READ = 3; localparam S_WRITE = 4; localparam S_ACK = 5; localparam S_CK_STATE = 6; //present state monitor localparam S_WREN = 7; wire spi_flash_cmd_ack; reg[3:0] sub_cmd; reg sub_cmd_valid; reg[8:0] sub_size; reg[4:0] state,next_state; reg[7:0] state_reg; wire sub_data_valid; wire[7:0] sub_data_in; wire[7:0] sub_data_out; assign sub_data_in = data_in; assign cmd_ack = (state == S_ACK); always@(posedge sys_clk or posedge rst) begin if(rst==1) state <= S_IDLE; else state <= next_state; end always@(*) begin case(state) S_IDLE: if(cmd_valid && cmd == `CMD_BE) next_state <= S_WREN; else if(cmd_valid && cmd == `CMD_SE) next_state <= S_WREN; else if(cmd_valid && cmd == `CMD_READ) next_state <= S_READ; else if(cmd_valid && cmd == `CMD_PP) next_state <= S_WREN; else next_state <= S_IDLE; S_WREN: if(spi_flash_cmd_ack && cmd == `CMD_BE) next_state <= S_BE; else if(spi_flash_cmd_ack && cmd == `CMD_SE) next_state <= S_SE; else if(spi_flash_cmd_ack && cmd == `CMD_PP) next_state <= S_WRITE; else next_state <= S_WREN; S_BE: if(spi_flash_cmd_ack) next_state <= S_CK_STATE;//读取状态寄存器 else next_state <= S_BE; S_SE: if(spi_flash_cmd_ack) next_state <= S_CK_STATE;
Spartan 6 FPGA 设计经典流水灯实验VERILOG源码 Xilinx ISE14.6 工程文件 //拨码开关SW3作为开关信号,导航按键UP和DOWN作为LED流动方向控制信号,实现8个LED开关、方向可控的流水灯功能 module sp6( input ext_clk_25m, //外部输入25MHz时钟信号 input ext_rst_n, //外部输入复位信号,低电平有效 input[0:0] switch, //拨码开关SW3输入,ON -- 低电平;OFF -- 高电平 input key_upup,key_down, //up和down两个导航按键输入,未按下为高电平,按下后为低电平 output reg[7:0] led //8个LED指示灯接口 ); //------------------------------------- //按键抖动判断逻辑 wire key; //所有按键值相与的结果,用于按键触发判断 reg[3:0] keyr; //按键值key的缓存寄存器 assign key = key_upup & key_down; always @(posedge ext_clk_25m or negedge ext_rst_n) if (!ext_rst_n) keyr <= 4'b1111; else keyr <= {keyr[2:0],key}; wire key_neg = ~keyr[2] & keyr[3]; //有按键被按下 wire key_pos = keyr[2] & ~keyr[3]; //有按键被释放 //------------------------------------- //定时计数逻辑,用于对按键的消抖判断 reg[19:0] cnt; always @ (posedge ext_clk_25m or negedge ext_rst_n) if (!ext_rst_n) cnt <= 20'd0; else if(key_pos || key_neg) cnt <=20'd0; else if(cnt < 20'd999_999) cnt <= cnt + 1'b1; else cnt <= 20'd0; reg[1:0] key_value[1:0]; always @(posedge ext_clk_25m or negedge ext_rst_n) if (!ext_rst_n) begin key_value[0] <= 2'b11; key_value[1] <= 2'b11; end else if(cnt == 20'd999_999) begin //定时键值采集 key_value[0] <= {key_upup,key_down}; key_value[1] <= key_value[0]; end wire[1:0] key_press = key_value[1] & ~key_value[0]; //消抖后按键值变化标志位 //------------------------------------ //流水灯开启、停止和流动方向控制开关、按键值采集 reg led_en; //LED流水灯工作使能信号,高电平有效 reg led_dir; //LED流水灯方向控制信号,1--从高到低流动,0--从低到高流动 always @ (posedge ext_clk_25m or negedge ext_rst_n) if(!ext_rst_n) begin led_en <= 1'b0; led_dir <= 1'b0; end else begin //流水灯开启/停止控制 if(!switch[0]) led_en <= 1'b1; else led_en <= 1'b0; //流水灯方向控制 if(key_press[0]) led_dir <= 1'b0; //从低到高流动 else if(key_press[1]) led_dir <= 1'b1; //从高到低流动 else ; end //------------------------------------ //LED流水灯变化延时计数器 reg[23:0] delay; always @ (posedge ext_clk_25m or negedge ext_rst_n) if(!ext_rst_n) delay <= 24'd0; else delay <= dela
Uart串口读写实验Cyclone10 FPGA实验Verilog源码Quartus17.1工程文件+文档资料, FPGA为CYCLONE10LP系列中的10CL025YU256C8. 完整的Quartus工程文件,可以做为你的学习设计参考。 module uart_test( input clk, input rst_n, input uart_rx, output uart_tx ); parameter CLK_FRE = 50;//Mhz localparam IDLE = 0; localparam SEND = 1; //send HELLO ALINX\r\n localparam WAIT = 2; //wait 1 second and send uart received data reg[7:0] tx_data; reg[7:0] tx_str; reg tx_data_valid; wire tx_data_ready; reg[7:0] tx_cnt; wire[7:0] rx_data; wire rx_data_valid; wire rx_data_ready; reg[31:0] wait_cnt; reg[3:0] state; assign rx_data_ready = 1'b1;//always can receive data, //if HELLO ALINX\r\n is being sent, the received data is discarded always@(posedge clk or negedge rst_n) begin if(rst_n == 1'b0) begin wait_cnt <= 32'd0; tx_data <= 8'd0; state <= IDLE; tx_cnt <= 8'd0; tx_data_valid <= 1'b0; end else case(state) IDLE: state <= SEND; SEND: begin wait_cnt <= 32'd0; tx_data <= tx_str; if(tx_data_valid == 1'b1 && tx_data_ready == 1'b1 && tx_cnt < 8'd12)//Send 12 bytes data begin tx_cnt <= tx_cnt + 8'd1; //Send data counter end else if(tx_data_valid && tx_data_ready)//last byte sent is complete begin tx_cnt <= 8'd0; tx_data_valid <= 1'b0; state <= WAIT; end else if(~tx_data_valid) begin tx_data_valid <= 1'b1; end end WAIT: begin wait_cnt <= wait_cnt + 32'd1; if(rx_data_valid == 1'b1) begin tx_data_valid <= 1'b1; tx_data <= rx_data; // send uart received data end else if(tx_data_valid && tx_da