FPGA 按键控制tx串口实现数据自加,就是在开发板上按一下按键,串口发送到电脑端,就能实现数字自加,下面是顶层的代码 ,按一次按键自加10

`timescale 1ns / 1ps

module top_key_tx(
             input                     sysclk,
             input                     rst_n,
             input                     key,
             output                    tx
    );
               reg   [7:0]      data;
              
               wire            tx_done;
               wire            flag;
                 always@(posedge sysclk)
                    if(!rst_n)
                      data<=0;
                  else if(flag==1)
                  data<=data+10;
                     else
                     data<=data;
    
  
    
    tx tx_u(
             .                  sysclk   (sysclk   )      ,
             .                  rst_n    (rst_n    )      ,
             .                  data     (data     )      ,   //数据
             .                  done     (flag    )      ,//数据输入进来完成的信号
             .                  tx       (tx       )      ,
             .                  tx_done  (tx_done  )      //数据包装完成的信号   
                 
                 
                 
    );  
    key  key_u(
              .          sysclk (sysclk)  ,
              .          rst_n  (rst_n )  ,
              .          key    (key   )  ,
              .          flag   (flag  )
    );
endmodule

//它的仿真,

`timescale 1ns / 1ps

module tb_key_tx(
    );
                 reg             sysclk;
                 reg              rst_n;
                 reg              key;
                 wire              tx;
            initial  begin
                sysclk=0;
                rst_n=0;
                key=1;
                #101
                rst_n=1;
                #20
                key=0;
                #200
                key=1;
            end
    always#10 sysclk=~sysclk;
    
    
    
    top_key_tx top_key_tx_u (
            .                     sysclk(sysclk)  ,
            .                     rst_n (rst_n )  ,
            .                     key   (key   )   ,
            .                     tx    (tx    )
    );
    
    
    
    
endmodule
 

//我这里仿真是按一次按键 可以实现数字自加

  • 7
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现该功能的流程如下: 1. 将模拟量接入到pcf8951的模拟输入引脚AIN0,AIN1和AIN2上。 2. 在FPGA上编写代码,通过SPI总线与pcf8951进行通信,实现对AIN0,AIN1和AIN2的AD转换。 3. 将转换后的数据通过UART串口发送电脑上。 4. 在电脑上编写串口通信程序,接收并显示从FPGA发送过来的数据下面是一个简单的示例代码,仅供参考: ```verilog // 定义SPI总线的控制信号 reg spi_ss; reg spi_sclk; reg spi_mosi; wire spi_miso; // 定义UART串口的控制信号 reg uart_tx; wire uart_rx; // 定义AD转换后的数据 reg [7:0] ad_data0; reg [7:0] ad_data1; reg [7:0] ad_data2; // 定义计数器 reg [15:0] cnt; // 初始化 initial begin // 将SPI总线和UART串口的控制信号设置为输出 spi_ss = 1'b1; spi_sclk = 1'b0; spi_mosi = 1'b0; uart_tx = 1'b1; // 将AD转换后的数据设置为0 ad_data0 = 8'h00; ad_data1 = 8'h00; ad_data2 = 8'h00; // 将计数器清零 cnt = 16'h0000; end // SPI总线的时序控制 always @(posedge spi_sclk) begin // 从pcf8951读取AIN0的AD转换结果 spi_ss = 1'b0; spi_mosi = 8'h80; ad_data0 = {8'h00, spi_miso}; spi_ss = 1'b1; // 从pcf8951读取AIN1的AD转换结果 spi_ss = 1'b0; spi_mosi = 8'h90; ad_data1 = {8'h00, spi_miso}; spi_ss = 1'b1; // 从pcf8951读取AIN2的AD转换结果 spi_ss = 1'b0; spi_mosi = 8'ha0; ad_data2 = {8'h00, spi_miso}; spi_ss = 1'b1; end // UART串口的时序控制 always @(posedge cnt[15]) begin // 将计数器加1 cnt <= cnt + 1; // 每100个时钟周期发送一次数据 if (cnt == 16'h0064) begin // 发送AIN0的AD转换结果 uart_tx <= 1'b0; #1; $fwrite($fopen("uart.txt", "a"), "AIN0=%d\n", ad_data0); uart_tx <= 1'b1; #1; // 发送AIN1的AD转换结果 uart_tx <= 1'b0; #1; $fwrite($fopen("uart.txt", "a"), "AIN1=%d\n", ad_data1); uart_tx <= 1'b1; #1; // 发送AIN2的AD转换结果 uart_tx <= 1'b0; #1; $fwrite($fopen("uart.txt", "a"), "AIN2=%d\n", ad_data2); uart_tx <= 1'b1; #1; // 将计数器清零 cnt <= 16'h0000; end end ``` 在上述代码中,我们使用SPI总线读取pcf8951的AD转换结果,并将转换后的数据通过UART串口发送电脑上。同时,我们还使用计数器控制发送数据的频率,每100个时钟周期发送一次数据。 需要注意的是,上述代码仅为示例代码,具体实现还需要考虑SPI总线和UART串口的时序要求,以及AD转换电路的参数配置等方面的问题。同时,还需要根据具体的FPGA开发板串口通信软件进行相应的调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值