RS485接口收发测试FPGA读写实验Verilog逻辑源码Quartus工程文件+文档说明资料,FPGA为CYCLONE4系列中的EP4CE6E22C8. 完整的工程文件,可以做为你的学习设计参考。 实验任务和现象 任务:使用两块开发板,一块用作发送,一块用作接收。通过4个按键改变数据,并用LED将发送和接收的数据显示出来。 现象:两块开发板LED显示的效果一样,并且按下不同的按键,可以改变LED的显示,同时接收的板子接到数据后改变LED显示。 •5、设计思路 我们依旧采用串口的设计思路,设计程序,但因为 MAX485是半双工器件,所以需要接收和发送状态切换,有两个时能端,我们的开发板,将两个接到一起用一个引脚控制。 我们以串口发送为例: 以波特率9600为例子说明,波特率9600接收一个bit的时间为1s/9600=104us,即每隔104us发送一个数据。 module RS485_Revc ( input sys_clk , input sys_rst_n , input RO , output wire RE_DE , output reg [7:0] LED ); /***************reg define****************/ reg [7:0] buff ; reg [7:0] data_out ; reg [15:0] counter ; reg rxd_din1 ; //uart rxd input ; reg rxd_din2 ; //uart rxd input ; reg rxd_negedge_sig_flag ; /***************wire define***************/ wire rxd_negedge_sig ; /******************************************************************************************************* ** Main Program ** ********************************************************************************************************/ assign RE_DE = 1'b0; always @ (posedge sys_clk or negedge sys_rst_n) begin if ( sys_rst_n ==1'b0 ) begin rxd_din1 <= 1'b0; rxd_din2 <= 1'b0; end else begin rxd_din1 <= RO ; rxd_din2 <= rxd_din1; end end assign rxd_negedge_sig = (~rxd_din2) &(rxd_din1); always @ (posedge sys_clk or negedge sys_rst_n) begin if ( sys_rst_n ==1'b0) rxd_negedge_sig_flag <= 1'b0; else rxd_negedge_sig_flag <= rxd_negedge_sig; end always @ (posedge s
28BYJ-48步进电机(EP4CE6)FPGA控制Verilog逻辑源码Quartus工程文件+文档资料, 28BYJ-48步进电机: 步进电机是一种将电脉冲转化为角位移的执行机构。通俗一点讲:当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(及步进角)。您可以通过控制脉冲个来控制角位移量,从而达到准确定位的目的;同时您可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。 2. 步进电机规格: 步进电机28BYJ48型四相八拍电机,电压为DC5V—DC12V。 3. 实现原理 当对步进电机施加一系列连续不断的控制脉冲时,它可以连续不断地转动。每一个脉冲信号对应步进电机的某一相或两相绕组的通电状态改变一次,也就对应转子转过一定的角度(一个步距角)。当通电状态的改变完成一个循环时,转子转过一个齿距。四相步进电机可以在不同的通电方式下运行 module STEP_MOTO_V1_0 ( //input input sys_clk , input sys_rst_n , input [2:0] key , output reg mot_out_a , output reg mot_out_b , output reg mot_out_c , output reg mot_out_d ); //reg define //reg [8-1:0] counter ; //reg [8-1:0] count ; reg [25:0] clk_cnt ; reg [ 2:0] step_cnt ; //wire wire step_en ; //wire define //parameter define /******************************************************************************************************* ** Main Program ** ********************************************************************************************************/ // gen a time counter , 5500000 * 20ns always @(posedge sys_clk or negedge sys_rst_n) begin if (sys_rst_n ==1'b0) clk_cnt <= 26'b0; else if (key[1]==1'd0 && key[2]==1'd1 && clk_cnt == 26'd250000 ) clk_cnt <= 26'b0; else if ( key[1]==1'd1 && key[2]==1'd0 && clk_cnt == 26'd600000 ) clk_cnt <= 26'b0; else if (clk_cnt == 26'd400000 ) clk_cnt <= 26'b0; else clk_cnt <= clk_cnt + 26'b1; end // step enable is active 500000 * 20ns assign step_en = ( clk_cnt == 26'b0 ) ? 1:0 ; always @(posedge step_en or negedge sys_rst_n) begin if
FPGA(EP4CE6)控制步进电机实验Verilog逻辑源码Quartus工程文件+文档资料, module STEP_MOTO_V1_0 ( //input input sys_clk , input [3:0] key , output reg mot_out_a , output reg mot_out_b , output reg mot_out_c , output reg mot_out_d ); //reg define reg [8-1:0] counter ; reg [8-1:0] count ; reg [25:0] clk_cnt ; reg [ 2:0] step_cnt ; //wire wire step_en ; //wire define //parameter define assign sys_rst_n = 1'b1 ; // gen a time counter , 5500000 * 20ns always @(posedge sys_clk or negedge sys_rst_n) begin if (sys_rst_n ==1'b0) clk_cnt <= 26'b0; else if ( clk_cnt == 26'd500000 ) clk_cnt <= 26'b0; else clk_cnt <= clk_cnt + 26'b1; end // step enable is active 5500000 * 20ns assign step_en = ( clk_cnt == 26'b0 ) ? 1:0 ; always @(posedge step_en or negedge sys_rst_n) begin if (sys_rst_n ==1'b0) step_cnt <= 3'b0; else step_cnt <= step_cnt + 3'b1; end always @(posedge step_en or negedge sys_rst_n) begin if (sys_rst_n ==1'b0) begin mot_out_a <= 1'b0; mot_out_b <= 1'b0; mot_out_c <= 1'b0; mot_out_d <= 1'b0; end else if ( step_cnt == 0 ) begin mot_out_a <= 1'b0; // 6 mot_out_b <= 1'b0; mot_out_c <= 1'b0; mot_out_d <= 1'b1; end else if ( step_cnt == 1 ) begin mot_out_a <= 1'b0; mot_out_b <= 1'b0; mot_out_c <= 1'b1; mot_out_d <= 1'b1; end else if ( step_cnt == 2 ) begin mot_out_a <= 1'b0;
FPGA读写DS1302 RTC实验Verilog逻辑源码Quartus工程文件+文档资料, FPGA为CYCLONE4系列中的EP4CE6E22C8. 完整的工程文件,可以做为你的学习设计参考。 module DS1302( input sys_clk , input sys_rst_n , output DS1302_CE , output DS1302_CLK , inout DS1302_IO , output wire seg_c1 , output wire seg_c2 , output wire seg_c3 , output wire seg_c4 , output wire seg_a , output wire seg_b , output wire seg_c , output wire seg_e , output wire seg_d , output wire seg_f , output wire seg_g , output wire seg_h ); /************************************/ reg [3:0] i ;//ִ�в��� reg [4:0] rc1_data ;//������1������ reg [4:0] rc2_data ;//������2������ reg [4:0] rc3_data ;//������3������ reg [4:0] rc4_data ;//������4������ reg [7:0] isStart ;//��ʼ��־ reg [7:0] rData ;//�����ݴ��� reg [7:0] sec_data ;//������ reg [7:0] min_data ;//������ /************************************/ wire Done_Sig ; //�����ź� wire [7:0] Time_Read_Data ; //�����ʱ������ /************************************/ always @ ( posedge sys_clk or negedge sys_rst_n ) begin if ( !sys_rst_n ) begin i <= 4'd0; //ִ�в������� isStart <= 8'd0; //��ʼ��־���� rData <= 8'd0; //�����ݴ������� end else case( i ) 0: if ( Done_Sig ) begin isStart <= 8'd0; i <= i + 1'b1; end else begin isStart <= 8'b1000_0000; rData <= 8'h00; //���ݼĴ���д��00h end 1: if ( Done_Sig ) begin isStart <= 8'd0; i <= i + 1'b1; end
KEY_4x4扫描键盘FPGAVerilog逻辑源码Quartus工程文件,FPGA为CYCLONE4系列中的EP4CE6E22C8. 完整的工程文件,可以做为你的学习设计参考。 module KEY_4x4 ( input sys_clk, //50MHZ input sys_rst_n , input [3:0] key_row , //�� //output wire [3:0] key_col , //�� output reg [3:0] key_col , //�� output wire [7:0] LED , //��ʾ��ֵ output reg [3:0] key_value //��ֵ ); reg [5:0] count;//delay_20ms reg [2:0] state; //״̬��־ reg key_flag; //������־λ reg clk_500khz; //500KHZʱ���ź� reg [3:0] key_col_reg; //�Ĵ�ɨ����ֵ reg [3:0] key_row_reg; //�Ĵ�ɨ����ֵ always @(posedge sys_clk or negedge sys_rst_n) begin if (!sys_rst_n) begin clk_500khz <= 0 ; count= 50 ) begin clk_500khz <= ~clk_500khz ; count<=0; end else count <= count + 1; end end always @(posedge clk_500khz or negedge sys_rst_n) if(!sys_rst_n) begin key_col<=4'b0000; state<=0; end else begin case (state) 0: begin key_col[3:0]<=4'b0000; key_flag<=1'b0; if(key_row[3:0]!=4'b1111) begin //�м����£�ɨ����һ�� state<=1; key_col[3:0]<=4'b1110; end else state<=0; end 1: begin if(key_row[3:0]!=4'b1111) //�ж��Ƿ��ǵ�һ�� state<=5; else begin state<=2; key_col[3:0]<=4'b1101; //ɨ���ڶ��� end end 2: begin if(key_row[3:0]!=4'b1111) //�ж��Ƿ��ǵڶ��� state<=5; else begin //ɨ�������� state<=3; key_col[3:0]<=4'b1011; end end 3: begin if(key_row[3:0]!=4'b1111) //�ж��Ƿ��ǵ���һ�� state<=5; else begin state<=4; key_col[3:0]<=4'b0111; end //ɨ�������� end 4: begin if (key_row
lm75A温度数字转换器 FPGA读写实验Verilog逻辑源码Quartus工程文件+文档资料,FPGA为CYCLONE4系列中的EP4CE6E22C8. 完整的工程文件,可以做为你的学习设计参考。 module LM75_SEG_LED ( //input input sys_clk , input sys_rst_n , inout sda_port , //output output wire seg_c1 , output wire seg_c2 , output wire seg_c3 , output wire seg_c4 , output reg seg_a , output reg seg_b , output reg seg_c , output reg seg_e , output reg seg_d , output reg seg_f , output reg seg_g , output reg seg_h , output reg clk_sclk ); //parameter define parameter WIDTH = 8; parameter SIZE = 8; //reg define reg [WIDTH-1:0] counter ; reg [9:0] counter_div ; reg clk_50k ; reg clk_200k ; reg sda ; reg enable ; reg [WIDTH-1:0] data_out ; reg [31:0] counter_init ; reg [10:0] buff ; reg [7:0] lm75_temp ; reg [3:0] segled_counter ; reg [25:0] count ; reg [ 3:0] disp_data ; reg [7:0] dat ; reg disp_clk ; reg [25:0] clk_cnt ; reg [15:0] scan_cnt ; reg [ 3:0] segled_bit_sel ; reg [ 3:0] lm75_temp_dec_l ; reg [ 3:0] lm75_temp_dec_h ; reg segled_a ; reg segled_b ; reg
LCD1602屏 (EP4CE30) FPGA读写实验Verilog逻辑源码Quartus工程文件+文档资料。FPGA为CYCLONE4系列中的EP4CE30F23C8. 完整的工程文件,可以做为你的学习设计参考。 module LCD1602_Cnt(input sys_clk, //50M input sys_rst_n, output reg lcd_rs, //0:write order; 1:write data output lcd_rw, //0:write data; 1:read data output reg lcd_en, // output reg [7:0] lcd_data); //--------------------lcd1602 order---------------------------- parameter Mode_Set = 8'h38, //������ʾģʽ��8λ2��5x8���� Cursor_Set = 8'h0c, //��ʾ������겻��ʾ�����겻������˸ Address_Set = 8'h06, //���ֲ����������Զ����� Clear_Set = 8'h01; //��������긴λ /****************************LCD1602 Display Data****************************/ wire [7:0] data0,data1; //counter data wire [7:0] addr; //write address //---------------------------------1s counter----------------------------------- reg [25:0] cnt1; reg [7:0] data_r0,data_r1; always@(posedge sys_clk or negedge sys_rst_n) begin if(!sys_rst_n) begin cnt1 <= 1'b0; data_r0 <= 1'b0; data_r1 <= 1'b0; end else if(cnt1==26'd50000000) begin if(data_r0==8'd9) begin data_r0 <= 1'b0; if(data_r1==8'd9) data_r1 <= 1'b0; else data_r1 <= data_r1 + 1'b1; end else data_r0 <= data_r0 + 1'b1; cnt1 <= 1'b0; end else cnt1 <= cnt1 + 1'b1; end assign data0 = 8'h30 + data_r0 ; assign data1 = 8'h30 + data_r1 ; //-------------------address------------------ assign addr = 8'h80; /****************************LCD1602 Driver****************************/ //-----------------------lcd1602 sys_clk_en--------------------- reg
FPGA读写SD卡读取BMP图片通过LCD显示例程实验 Verilog逻辑源码Quartus工程文件+文档说明,FPGA型号Cyclone4E系列中的EP4CE6F17C8,Quartus版本17.1。 1 实验简介 在前面的实验中我们练习了 SD 卡读写,VGA 视频显示等例程,本实验将 SD 卡里的 BMP 图 片读出,写入到外部存储器,再通过 VGA、LCD 等显示。 本实验如果通过液晶屏显示,需要有液晶屏模块。 2 实验原理 在前面的实验中我们在 VGA、LCD 上显示的是彩条,是 FPGA 内部产生的数据,本实验将彩 条替换为 SD 内的 BMP 图片数据,但是 SD 卡读取速度远远不能满足显示速度的要求,只能先写 入外部高速 RAM,再读出后给视频时序模块显示 module top( input clk, input rst_n, input key1, output [5:0] seg_sel, output [7:0] seg_data, output vga_out_hs, //vga horizontal synchronization output vga_out_vs, //vga vertical synchronization output[4:0] vga_out_r, //vga red output[5:0] vga_out_g, //vga green output[4:0] vga_out_b, //vga blue output sd_ncs, //SD card chip select (SPI mode) output sd_dclk, //SD card clock output sd_mosi, //SD card controller data output input sd_miso, //SD card controller data input output sdram_clk, //sdram clock output sdram_cke, //sdram clock enable output sdram_cs_n, //sdram chip select output sdram_we_n, //sdram write enable output sdram_cas_n, //sdram column address strobe output sdram_ras_n, //sdram row address strobe output[1:0] sdram_dqm, //sdram data enable output[1:0] sdram_ba, //sdram bank address output[12:0] sdram_addr, //sdram address inout[15:0] sdram_dq //sdram data ); parameter MEM_DATA_BITS = 16 ; //external memory user interface data width parameter ADDR_BITS = 24
FPGA采样AD9238数据并通过VGA波形显示例程 Verilog逻辑源码Quartus工程文件+文档说明,FPGA型号Cyclone4E系列中的EP4CE6F17C8,Quartus版本17.1。 ADC 模块型号为 AN9238,最大采样率 65Mhz,精度为 12 位。实验中把 AN9238 的 2 路输入以波形方式在 HDMI 上显示出来,我们可以用更加直观的方 式观察波形,是一个数字示波器雏形。 module top( input clk, input rst_n, output ad9238_clk_ch0, output ad9238_clk_ch1, input[11:0] ad9238_data_ch0, input[11:0] ad9238_data_ch1, //vga output output vga_out_hs, //vga horizontal synchronization output vga_out_vs, //vga vertical synchronization output[4:0] vga_out_r, //vga red output[5:0] vga_out_g, //vga green output[4:0] vga_out_b //vga blue ); wire video_clk; wire video_hs; wire video_vs; wire video_de; wire[7:0] video_r; wire[7:0] video_g; wire[7:0] video_b; wire grid_hs; wire grid_vs; wire grid_de; wire[7:0] grid_r; wire[7:0] grid_g; wire[7:0] grid_b; wire wave0_hs; wire wave0_vs; wire wave0_de; wire[7:0] wave0_r; wire[7:0] wave0_g; wire[7:0] wave0_b; wire wave1_hs; wire wave1_vs; wire wave1_de; wire[7:0] wave1_r; wire[7:0] wave1_g; wire[7:0] wave1_b; wire adc_clk; wire adc0_buf_wr; wire[10:0] adc0_buf_addr; wire[7:0] adc0_bu
FPGA 读写SD卡音乐播放例程Verilog逻辑源码Quartus工程文件+文档说明,,FPGA型号Cyclone4E系列中的EP4CE6F17C8,Quartus版本17.1。 实验简介 在其他实验中我们已经完成了 SD 卡读写和音频模块的录音播放,本实验通过搜索 SD 卡中 WAV 音乐文件,然后送到音频模块播放,完成一个简单音乐播放器的功能。 2 实验原理 本实验一个关键是在没有文件系统的情况下,搜索 SD 卡每个扇区的内容,匹配出 WAV 文件, 这里有一个假设:假设每一个文件都是从一个扇区第一个字节开始而且文件是连续存储的,经过 大量实验,发现 FAT32 文件格式中的文件确实如此。 2.1 WAV 文件格式 大部分的文件都有文件头,WAV 也丌例外,我们通过分析 SD 卡一个扇区的前几个字节,判 断这个文件是否为 WAV 文件。 WAV 文件作为多媒体中使用的声波文件格式之一,它是以 RIFF 格式为标准的。RIFF 是英文 Resource Interchange File Format 的缩写,每个 WAV 文件的头四个字节便是“RIFF”,所以本实验 就简单的以每个扇区的前 4 个字节是否为“RIFF”判断该文件是否为 WAV 文件,紧接着 4 个字节 表示文件的大小,这样我们就可以确定要读取的数据量。WAV 文件头大小是 88 字节,在播放时 要把前 88 个字节的文件头去掉。 module top( input clk, input rst_n, input key1, input wm8731_bclk, //audio bit clock input wm8731_daclrc, //DAC sample rate left right clock output wm8731_dacdat, //DAC audio data output input wm8731_adclrc, //ADC sample rate left right clock input wm8731_adcdat, //ADC audio data input inout wm8731_scl, //I2C clock inout wm8731_sda, //I2C data output sd_ncs, //SD card chip select (SPI mode) output sd_dclk, //SD card clock output sd_mosi, //SD card controller data output input sd_miso, //SD card controller data input output [5:0] seg_sel, output [7:0] seg_data ); wire[9:0] lut_index; wire[31:0] lut_data; wire[3:0] state_code; wire[6:0] seg_data_0; //I2C master controller i2c_config i2c_config_m0( .rst (~rst_n ), .clk (clk ),