FPGA小技巧之testbench 生成串行和并行数据

这篇具有很好参考价值的文章主要介绍了FPGA小技巧之testbench 生成串行和并行数据。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1 testbench 生成并行数据

// 模拟发送8次数据,分别0~7
initial begin
        #200
        rx_bit(8'd0);           // 任务的调用,任务名+括号中要传递进任务的参数       0 0000 0000 1 
        rx_bit(8'd1);                                                        //  0 0000 0001 1 -> 0 1000 0000 1        
        rx_bit(8'd2);                                                        //  0 0000 0010 1 -> 0 0100 0000 1      
        rx_bit(8'd3);                                                        //  0 0000 0011 1 -> 0 1100 0000 1
        rx_bit(8'd4); 
        rx_bit(8'd5); 
        rx_bit(8'd6); 
        rx_bit(8'd7); 
end

// 定义一个名为 rx bit的任务,每次发送的数据有10位
// data的值分别为0~7 由j的值传递进来
// 任务以task开头,后面紧跟着的是任务名,调用时使用
task rx_bit(
    // 传递到任务中的参数,调用任务的时候从外部传进来一个8位的值
    input [7:0] data
);
    integer i;   // 定义一个常量
    // 用for循环产生一帧数据,for括号中最后执行的内容只能写 i=i+1
    // 不可以写成C语言那种  i=i++ 的形式
    for (i=0; i<10; i=i+1) begin
        case(i)
            0: rx <= 1'b0;
            1: rx <= data[0];
            2: rx <= data[1];
            3: rx <= data[2];
            4: rx <= data[3];
            5: rx <= data[4];
            6: rx <= data[5];                
            7: rx <= data[6];
            8: rx <= data[7]; 
            9: rx <= 1'b1;
        endcase
        #(5208*20);         // 每发送1bit 数据延时5208个时钟周期

    end
endtask

这个5208 如何计算的,因为我们是9600波特率,所以发送1bit的时间为1/9600 秒,如果采用50MHz(周期为20ns)的系统时钟来计数,需要计数的个数为 (1/9600)s / 20ns = 5208 个系统时钟周期

2 testbench 生成串行数据

initial begin
    i_en <= 1'b0;
    i_data <= 8'b0;
    
    #2000
    // 发送数据0
    i_en <= 1'b1;
    i_data <= 8'd0;
    #25
    i_en <= 1'b0;
    // 每发送1bit数据需要5208个时钟周期,一帧数据为10bit
    // 所以需要数据延时 (5208*20*10)后再产生下一个数据
    #(347.2*25*11);
    // 发送数据1
    i_en <= 1'b1;
    i_data <= 8'd1;
    #25
    i_en <= 1'b0;
    #(347.2*25*11);
        // 发送数据2
    i_en <= 1'b1;
    i_data <= 8'd2;
    
    #25
    i_en <= 1'b0;
    #(347.2*25*11);
        // 发送数据3
    i_en <= 1'b1;
    i_data <= 8'd3;
    
    #25
    i_en <= 1'b0;
    #(347.2*25*11);

    // 发送数据4
    i_en <= 1'b1;
    i_data <= 8'd4;
    
    #25
    i_en <= 1'b0;
    #(347.2*25*11);

        // 发送数据5
    i_en <= 1'b1;
    i_data <= 8'd5;
    
    #25
    i_en <= 1'b0;
    #(347.2*25*11);

            // 发送数据6
    i_en <= 1'b1;
    i_data <= 8'd6;
    
    #25
    i_en <= 1'b0;
    #(347.2*25*11);

end

347.2 是根据115200 波特率算出来的,25是 40M的时钟,11 表示11位文章来源地址https://www.toymoban.com/news/detail-730978.html

到了这里,关于FPGA小技巧之testbench 生成串行和并行数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 计算机网络-数据通信基础知识(数据通信模型 相关术语 单工/半双工/全双工 串行/并行 同步/异步 码元 数据传输速率 带宽)

    广域网中有模拟信道,模拟信道能传模拟信号,不能传数字信号 数据从计算机网卡中以数字信号发出,经过调制解调器转换为模拟信号以放到广域网上的模拟信道传输,再由调制解调器转换为数字信号,数字信号经过计算机的转换才将数据展现出来 发送端的调制解调器:发

    2024年01月25日
    浏览(56)
  • FPGA学习笔记(五)Testbench(测试平台)文件编写进行Modelsim仿真

    一、FPGA学习笔记(一)入门背景、软件及时钟约束 二、FPGA学习笔记(二)Verilog语法初步学习(语法篇1) 三、FPGA学习笔记(三) 流水灯入门FPGA设计流程 四、FPGA学习笔记(四)通过数码管学习顶层模块和例化的编写 五、FPGA学习笔记(五)Testbench(测试平台)文件编写进行

    2024年02月07日
    浏览(54)
  • 串行&并行 同步&异步通信

    终端与其他设备(例如其他终端、计算机和外部设备)通过数据传输进行通信。数据传输可以通过两种方式进行: 并行通信和串行通信。 是指使用一条数据线,将数据一位一位地依次传输,每一位数据占据一个固定的时间长度。其只需要少数几条线就可以在系统间交换信息

    2023年04月20日
    浏览(53)
  • 介绍串行和并行两种通信方式

    参考文章: 串行和并行- CSDN搜索 并行传输和串行传输的区别_金陵大掌柜的博客-CSDN博客 (1)串行和并行是计算机领域中两个重要的概念。串行是指在计算机中,任务按照顺序一个一个执行,每个任务执行完后才能执行下一个任务。而并行是指多个任务同时进行,即多个任务

    2024年02月09日
    浏览(37)
  • 为什么串行接口速率比并行接口快?

    串行接口的速率会比并行快,可以从下面四个方面考虑: ①高速串口不需要时钟信号来同步数据流,也就没有时钟周期性的边沿,频谱不会集中,所以噪声干扰少很多。 以PCIE和SATA为例,时钟信息通过8b/10b编码已经集成在数据流里面,数据本身经过加扰,绝对不可能有多于

    2024年02月07日
    浏览(57)
  • 【FPGA零基础学习之旅#12】三线制数码管驱动(74HC595)串行移位寄存器驱动

    🎉欢迎来到FPGA专栏~三线制数码管驱动 ☆* o(≧▽≦)o *☆ 嗨 ~我是 小夏与酒 🍹 ✨ 博客主页: 小夏与酒的博客 🎈该系列 文章专栏: FPGA学习之旅 文章作者技术和水平有限,如果文中出现错误,希望大家能指正🙏 📜 欢迎大家关注! ❤️ 🥝 ISSP调试演示: 程序配置完成:

    2024年02月09日
    浏览(50)
  • FPGA学习(2)m序列和gold序列的产生

           m序列是最长线性反馈移位寄存器序列的简称。它是由带线性反馈的移存器产生的周期最长的序列。一般来说,一个n级线性反馈移存器可能产生的最长周期等于。         m序列是一种典型的伪随机序列。在通信领域有着广泛的应用,如扩频通信、卫星通信的码分

    2024年02月11日
    浏览(40)
  • 【FPGA零基础学习之旅#5】产生非等占空比信号

    🎉欢迎来到FPGA专栏~产生非等占空比信号 ☆* o(≧▽≦)o *☆ 嗨 ~我是 小夏与酒 🍹 ✨ 博客主页: 小夏与酒的博客 🎈该系列 文章专栏: FPGA学习之旅 文章作者技术和水平有限,如果文中出现错误,希望大家能指正🙏 📜 欢迎大家关注! ❤️ 我们通过LED的亮灭来展现等占空

    2024年02月05日
    浏览(53)
  • vue2/3 axios 请求重试、取消请求、loading 串行并行等(分享)

    基础版,添加 loading 在请求响应拦截器里面添加 loading,这样就不需要给每一个请求添加 loading 了 这些代码都是 vue2 项目的,vue3 也通用,改一下 loading 和 message 就好了(主要是 element 的区别) 我这里最后没有合并代码,有的配置不适合写在一起,看自己项目的需要 响应状态

    2024年02月10日
    浏览(52)
  • 【配电网优化】基于串行和并行ADMM算法的配电网优化研究(Matlab代码实现)

    💥 💥 💞 💞 欢迎来到本博客 ❤️ ❤️ 💥 💥 🏆 博主优势: 🌞 🌞 🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳ 座右铭: 行百里者,半于九十。 📋 📋 📋 本文目录如下: 🎁 🎁 🎁 目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码实现 随

    2023年04月23日
    浏览(68)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包