Xilinx FPGA:vivado关于单端ROM的一个只读小实验

news2024/11/25 8:20:10

一、实验要求

    将生成好的voe文件里的数据使用rom读取出来,采用串口工具发送给电脑(当按键来临时)。

二、程序设计

按键消抖模块:

`timescale 1ns / 1ps
module key_debounce(
  input           sys_clk    ,
  input           rst_n      ,
  input           key        ,
  output          key_flag 
    );
//    parameter              delay = 100_000_0   ; //20ms
    parameter              delay = 100;// 测试用
    reg[19:0]               cnt   ;
    
    always@(posedge sys_clk )
         if(!rst_n)
            cnt <= 0 ;
         else if ( key == 0 )begin
              if ( cnt == delay -1 )
                   cnt <= cnt ;
              else 
                   cnt <= cnt +1 ;
         end
         else
         cnt <= 0 ;
     
     assign  key_flag = ( cnt == delay -2 )?1:0 ;
    
    
    
    
    
    
endmodule

接收端模块:

`timescale 1ns / 1ps
module uart_tx(
   input                     sys_clk   ,
   input                     rst_n     ,
   input      [7:0]          ram_out   ,
   input                     tx_start  ,
   output      reg           tx_done   ,
   output      reg           tx_data
    );
    parameter               SYSCLK = 50_000_000 ;
    parameter               Baud   = 115200     ;
    parameter               COUNT  = SYSCLK/Baud;
    parameter               MID    = COUNT/2    ;
    
    //start_flag
    reg              tx_reg1  ;
    reg              tx_reg2  ;
    wire           start_flag ;
    
    always@(posedge sys_clk )
         if(!rst_n)begin
            tx_reg1 <= 0 ;
            tx_reg2 <= 0 ;
         end
         else
             begin
                 tx_reg1 <= tx_start  ;
                 tx_reg2 <= tx_reg1   ;
             end
    assign  start_flag = tx_reg1 & ~tx_reg2 ;
    
    ///tx_flag
    reg                   tx_flag ;
    reg[4:0]              cnt_bit ;
    reg[9:0]              cnt     ;
    
    always@(posedge sys_clk )
         if(!rst_n)
            tx_flag <= 0 ;
         else if ( start_flag == 1 )
            tx_flag <= 1 ;
         else if ( cnt_bit == 10 && cnt == COUNT -1 )
            tx_flag <= 0 ;
         else
            tx_flag <= tx_flag ;
   
   //cnt
    always@(posedge sys_clk )
         if(!rst_n)
            cnt <= 0 ;
         else if ( tx_flag == 1 )begin
              if ( cnt == COUNT - 1 )
                   cnt <= 0 ;
              else
                   cnt <= cnt +1 ;
         end
         else
         cnt <= 0 ;
    
    //cnt_bit 
    always@(posedge sys_clk )
         if(!rst_n)
            cnt_bit <= 0 ;
         else if ( tx_flag == 1 )begin
              if ( cnt == COUNT - 1 )begin
                  if ( cnt_bit == 10 )
                       cnt_bit <= 0 ;
                  else
                       cnt_bit <= cnt_bit +1 ;
              end
              else
              cnt_bit <= cnt_bit ;
         end
         else
         cnt_bit <= 0 ;
   
   //tx_data
   parameter               MODE_CHECK = 0 ;
   always@(posedge sys_clk )
        if(!rst_n) 
           tx_data <= 0 ;
        else if ( tx_flag == 1 )begin
             if ( cnt_bit > 0 && cnt_bit < 9 )
                  tx_data <= ram_out[cnt_bit -1] ;
             else if ( cnt_bit == 0 )
                  tx_data <= 0 ;
             else if ( cnt_bit == 9 )
                  tx_data <= ( MODE_CHECK == 0 )?^ram_out : ~^ram_out ;
             else if ( cnt_bit == 10 )
                  tx_data <= 1 ;
             else
                  tx_data <= tx_data ;    
        end
        else
        tx_data <= 1 ;
 
 ///tx_done 
     always@(posedge sys_clk )
          if(!rst_n)
             tx_done <= 0 ;
          else if ( tx_flag == 1 )begin
               if ( cnt_bit == 10 && cnt == COUNT -1 )
                    tx_done <= 1 ;
               else
                    tx_done <= 0 ;
          end
          else
          tx_done <= 0 ;
    

    
endmodule

顶层(ROM)模块:

IP参数:

`timescale 1ns / 1ps
///按键来临时,将rom中的数据读出,并通过tx模块返回给PC端
module rom(
     input            sys_clk    ,
     input            rst_n      ,
     input            key        ,
     output           tx_data  
    );
    wire             key_flag    ;
    wire             tx_done     ;
    reg              tx_start    ;
    reg              ena         ;
    reg[4:0]         addra       ;
    wire[7:0]        douta       ;
    
    always@(posedge sys_clk )
         if(!rst_n)
            addra <= 0 ;
         else if ( tx_done && addra == 15 )
            addra <= 15 ;   ///保持在15,不连续输出
         else if ( tx_done || key_flag )//key_flag 是因为第一个数据要输出,地址要+1
            addra <= addra +1 ;
         else
            addra <= addra ;
            
   always@(posedge sys_clk )
        if(!rst_n)
            ena <= 0 ;
        else if ( key_flag )
            ena <= 1 ;
        else if ( tx_done && addra <= 14 )
            ena <= 1 ;
        else if ( addra == 15 )
            ena <= 0 ;  
        else
            ena <= 0 ; 
    
    always@(posedge sys_clk )
         if (!rst_n)
             tx_start <= 0 ;
         else if ( key_flag )
             tx_start <= 1 ;   ///发送第一个数据
         else if ( tx_done && addra <= 14)///发送后面的数据 
             tx_start <= 1 ;
         else
             tx_start <= 0 ;
   
//----------- Begin Cut here for INSTANTIATION Template ---// INST_TAG
blk_mem_gen_0 rom (
  .clka(sys_clk ),    // input wire clka
  .ena(ena),      // input wire ena
  .addra(addra),  // input wire [3 : 0] addra
  .douta(douta)  // output wire [7 : 0] douta
);
// INST_TAG_END ------ End INSTANTIATION Template ---------
   
key_debounce key_debounce_u1(
                  .      sys_clk  (sys_clk )  ,
                  .      rst_n    (rst_n   )  ,
                  .      key      (key     )  ,
                  .      key_flag (key_flag)
    );
   
uart_tx uart_tx_u1(   
                   .     sys_clk (sys_clk )  ,   
                   .     rst_n   (rst_n   )  ,
                   .     ram_out (douta )  ,
                   .     tx_start(tx_start)  ,
                   .     tx_done (tx_done )  ,
                   .     tx_data (tx_data )
    );



endmodule

三、仿真结果

仿真程序:

`timescale 1ns / 1ps
module test_rom(  );

     reg            sys_clk    ;
     reg            rst_n      ;
     reg            key        ;
     wire           tx_data    ;
     
     initial 
            begin
                   sys_clk = 0 ;
                   rst_n   = 0 ;
                   key     = 1 ;
                   #10   
                   rst_n   = 1 ;
                   #1000
                   key     = 0 ;
            end
  always #1 sys_clk = ~sys_clk ;   


rom rom_1(
     .          sys_clk  (sys_clk)  ,
     .          rst_n    (rst_n  )  ,
     .          key      (key    )  ,
     .          tx_data  (tx_data)
    );












endmodule

实验结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1893065.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

平安养老险安徽分公司:助力乡村振兴 保险知识进农村

为深入宣传普及保险理念&#xff0c;进一步提升服务品质&#xff0c;营造“78全国保险公众宣传日”活动氛围&#xff0c;助力保险业健康稳定发展&#xff0c;近日&#xff0c;平安养老保险股份有限公司&#xff08;以下简称“平安养老险”&#xff09;安徽分公司走进安庆市宿松…

Elasticsearch 8.x 存储有无压缩?能压缩到多少?

1、认知前提 Elasticsearch 支持压缩&#xff0c;压缩方式默认为&#xff1a;LZ4 压缩算法。 具体参见&#xff1a; The default value compresses stored data with LZ4 compression, but this can be set to best_compression which uses DEFLATE for a higher compression r…

Lesson 46 Can you ... ?

Lesson 46 Can you … ? 词汇 lift v. 拿起&#xff0c;搬起 n. 电梯&#xff08;直梯&#xff09; 用法&#xff1a;1. lift … up 拎起……    例句&#xff1a;我可以拎起那只小猫。       I can lift that cat up.    2. take a lift    例句&#xff1a…

不看后悔!国内AI大比拼的精彩看点全汇总

至2022年AI爆发后&#xff0c;在中国已催生了上千个AI产品。 这些产品涵盖了从头部大厂到高等院校&#xff0c;再到初创企业的广泛阵容。 如&#xff1a; 大厂&#xff1a;百度文心、阿里通义、腾讯元宝、字节豆包、讯飞星火等高校&#xff1a;清华大学、北京大学等初创&…

Element中的表格组件Table和分页组件Pagination

简述&#xff1a;在 Element UI 中&#xff0c;Table组件是一个功能强大的数据展示工具&#xff0c;用于呈现结构化的数据列表。它提供了丰富的特性&#xff0c;使得数据展示不仅美观而且高效。而Pagination组件是一个用于实现数据分页显示的强大工具。它允许用户在大量数据中导…

悲情短视频:成都柏煜文化传媒有限公司

悲情短视频&#xff1a;在光影交错中触动人心的温柔力量 在这个五彩斑斓的视频时代&#xff0c;悲情短视频如同一抹深秋的寒露&#xff0c;悄然落在人们的心田&#xff0c;带来一丝不易察觉却又难以抗拒的凉意。它们不以华丽的特效或激昂的音乐取胜&#xff0c;而是凭借真挚的…

“拆分盘投资:机遇与风险并存

一、引言 随着互联网技术的日新月异&#xff0c;金融投资领域迎来了前所未有的变革&#xff0c;其中拆分盘作为一种新兴的投资模式&#xff0c;正逐渐进入公众的视野。其独特的价值增长逻辑和创新的投资机制&#xff0c;为投资者开辟了新的财富增值渠道。本文旨在深入探讨拆分…

Spring Cloud 概述

目录 ​编辑一、认识微服务 1、单体架构 2、集群和分布式架构 3、微服务架构 二、Spring Cloud 1、什么是 Spring Cloud 2、Spring Cloud 版本 3、Spring Cloud 的实现方案 Spring Cloud Netflix ​编辑Spring Cloud Alibaba 一、认识微服务 1、单体架构 很多创业公…

14-Django项目--文件上传-Excel

目录 前端 路由 视图函数 前端 <div class"modal-body"><form method"post" enctype"multipart/form-data" action"/pretty/asset/">{% csrf_token %}<input type"file" name"excel"><bu…

什么是失调电压/补偿电压?

目录 一、概念理解 二、仿真理解 一、概念理解 输入失调电压&#xff08;input offset voltage&#xff09;&#xff1a;当运放连接模式为跟随器时&#xff0c;同相接GND&#xff0c;输出端并不会输出GND&#xff0c;根据不同运放参数会有微弱电压输出&#xff0c;这个参数就…

一文了解“大数据招商思维”,读懂什么是大数据招商!

近年来&#xff0c;随着大数据及人工智能等新一代信息技术的快速发展&#xff0c;数据作为重要的资源和资产&#xff0c;成为推动经济发展的核心驱动力&#xff0c;广泛应用于各个领域&#xff0c;深刻的改变着我们的生产和生活方式。那么对于“招商引资”来说&#xff0c;大数…

深入探讨JavaScript中的队列,结合leetcode全面解读

前言 队列作为一种基本的数据结构&#xff0c;为解决许多实际问题提供了有效的组织和处理方式&#xff0c;对于提高系统的稳定性、可靠性和效率具有重要作用&#xff0c;所以理解队列是很重要的。 本文深入探讨JavaScript中的队列这种数据结构,结合leetcode题目讲解 题目直达…

前端笔记-day12

文章目录 01-视口02-宽度适配方案03-rem体验04-rem基本使用05-媒体查询06-rem适配07-rem布局08-less-体验09-less-注释10-less-运算11-less-嵌套12-less-变量13-less-导入14-less-导出15-less-禁止导出16-急速问诊&#xff08;不准确写法&#xff09;index.htmlindex.css 17-急…

新章节:全设备通用调度算法-通讯重构

新章节&#xff1a;全设备通用调度算法-通讯重构 文章目录 新章节&#xff1a;全设备通用调度算法-通讯重构前言一、重构了TCP和UDP通讯二、优化了OPC和OPCUA三、升级了监控客户端四、升级了通讯的图形化其他升级 前言 现在真的很懒也很少写代码了&#xff0c;写代码和更新进度…

Laravel5+mycat 报错 “Packets out of order”

背景 近期对负责项目&#xff0c;配置了一套 主从复制的 MySQL 集群 使用了中间件 mycat 但测试发现&#xff0c;替换了原来的数据连接后&#xff0c;会出现 Packets out of order 的报错 同时注意到&#xff0c;有的框架代码中竟然也会失效&#xff0c;比如 controller 类中&…

智慧园区可视化:构建全方位智能管理体系

通过图扑的 2D、 3D 和 GIS 可视化技术结合倾斜摄影、数字孪生和视频融合等技术&#xff0c;将园区各类数据集成展示&#xff0c;实时监控和分析环境与设施状况&#xff0c;提升管理效能和安全水平&#xff0c;实现智慧园区的全方位智能化运营。

vscode python调试,找不到控制调试工具栏,被隐藏了

问题&#xff1a; 如图所示&#xff0c;最开始蓝框中的调试台被莫名其妙的隐藏了&#xff0c;没法进行调试。 解决办法&#xff1a; 打开设置输入调试点击调试&#xff08;31&#xff09;找到红框选的那个选项&#xff0c;选择floating

多步预测模型大更新

往期精彩内容&#xff1a; 时序预测&#xff1a;LSTM、ARIMA、Holt-Winters、SARIMA模型的分析与比较-CSDN博客 VMD CEEMDAN 二次分解&#xff0c;Transformer-BiGRU预测模型-CSDN博客 独家原创 | 基于TCN-SENet BiGRU-GlobalAttention并行预测模型-CSDN博客 独家原创 | B…

正交的拉丁方阵(MOLS)

在组合数学中&#xff0c;如果两个同阶的拉丁方阵叠加后&#xff0c;每个位置上的有序对条目都是唯一的&#xff0c;则这两个拉丁方阵被称为正交的。 如果一组同阶的拉丁方阵中&#xff0c;任意两个方阵都是正交的&#xff0c;则这组方阵被称为一组相互正交的拉丁方阵&#xf…

SSM高校学生综合测评系统-计算机毕业设计源码16154

摘要 随着互联网时代的到来,同时计算机网络技术高速发展,网络管理运用也变得越来越广泛。因此,建立一个BS 结构的高校学生综合测评系统,会使高校学生综合测评系统工作系统化、规范化,也会提高高校学生综合测评系统平台形象,提高管理效率。 本学生综合测评系统是针对目前高校学生…