网页版的svn怎样同步代码_学会使用Hdlbits网页版Verilog代码仿真验证平台

大家推荐一款网页版的 Verilog代码编辑仿真验证平台,这个平台是国外的一家开源FPGA学习网站,通过

“https://hdlbits.01xz.net/wiki/Main_Page”

地址链接进入网页,在该网页上可以进行Verilog代码的编写、综合,而且最后还能够仿真出波形来验证设计代码的正确性,该验证平台是基于Icarus Verilog(简称iVerilog,比较著名的开源HDL仿真工具,也有对应的安装版本)的,让你随时随地只需登录网页就能够享受Verilog编程仿真的乐趣!

一、官方模板演示

1、首先打开

“https://hdlbits.01xz.net/wiki/Main_Page”,

打开后的界面如下图所示,全英文显示。如果感觉自己的英文水平欠佳,可以使用谷歌浏览器打开该网页,并选择在线翻译功能,翻译的正确率还是很高的。

4941ab8572b926cb02a25978d9a98019.png

2、点击Simulation下的 ”Run a Simulation(lcarus Verilog)“。

8f3d02079f047af19faac12e0b035b37.png

3、打开后的界面如下图所示,代码编辑框中给出了一个简单的例子。

 188cc5638fecce4bd96dc5128a928db1.png

4、点击下面的“Submit(new window)“在新界面中进行仿真。

ac8c9b075926f1ea7503577e7e19d1fa.png 

5、在新打开的界面中我们可以看到编译的信息和仿真波形图。

 90eeba4546be12ad1245b03c3dcabacd.png

二、实例演示

虽然看完了官方的模板演示,但我们要想立刻仿真验证自己设计的代码并不是那么容易,需要进行一番摸索。下面就是大家进行一个呼吸灯的设计实例演示。

1、学习过FPGA的朋友都知道要想对FPGA逻辑进行仿真一定要具备两个文件,一个是RTL代码文件,用来综合生成硬件电路的部分;第二个就是Testbench文件,用来验证RTL代码功能的仿真文件,这两者缺一不可。

2、根据观察发现官方模板中的代码编辑部分有两个module,大家也都知道一个.v 文件中只能有一个模块,也就是只能有一个module,而这里面有两个,那肯定就不对了。再仔细观察会发现代码编辑区域中的上半部分就是Testbench,而下半部分则是RTL代码,再结合仿真出的波形来更看验证了这个想法。原来 RTL 代码和Testbench都写在了一个编辑框里。

3、但是我们在提供的模板中发现一些我们平时几乎没有见过的新语法,如第4行的”initial `probe_start“、第6行的”`probe(clk)“、第26行的”`probe(in)“,通过模板的注释和多次实验发现这是官方定义的一个”宏“,也就是通过这个”宏“调用“probe”探针的功能,我们不用管这个”宏“是如何定义的,我们只需要会调用就可以了。

    4、下面我们通过该网页来仿真验证一下自己设计的呼吸灯的例子。详细代码如下(呼吸灯逻辑和Testbench代码的编写方法这里我们不做讲解,会在以后的文章中再进行详细说明),标红处的注释是需要特别强调的(代码可以全部直接复制使用)。

`timescale1ns/1ns//-------------------Tesebench--------------------moduletop_module;       //仿真文件名必须是“top_module”reg    sclk;reg    rst_n;wire   led;initial `probe_start;   // Start the timing diagram    `probe(sclk);         // Probe signal"clk",这是加载的系统时钟,只能在Tesebench中加载   //初始化initial    begin    sclk   =1'b0;    rst_n <= 1'b0;    #200    rst_n <= 1'b1;    #5000                 //一定要设置仿真停止时间,如果仿真结束时间太久会提示    $finish;end//产生20ns的时钟always#10sclk =~sclk;//为了减少仿真时间我们在仿真中重定义参数,不影响RTL代码中参数的值defparam   breath_led_inst.CNT_1US_MAX = 1;defparam   breath_led_inst.CNT_1MS_MAX  = 2;defparam   breath_led_inst.CNT_1S_MAX   =2;//-------------------breath_led--------------------breath_ledbreath_led_inst(    .sclk  (sclk  ),  //input    sclk      .rst_n(rst_n),  //input    rst_n     .led    (led  )   //output   led);endmodule //--------------------------------------------------//-----------------------RTL------------------------modulebreath_led#(    parameter  CNT_1US_MAX =6'd49,    parameter  CNT_1MS_MAX =10'd999,    parameter  CNT_1S_MAX  =10'd999)(    input  wire   sclk   ,    input  wire   rst_n  ,    outputreg    led);reg[5:0]  cnt_1us;  reg[9:0]  cnt_1ms;  reg[9:0]  cnt_1s;reg        cnt_1us_flag;reg        cnt_1ms_flag;reg        cnt_1s_flag;//cnt_1us:1us计数器always@(posedgesclk ornegedgerst_n)    if(rst_n ==1'b0)       cnt_1us <=6'b0;     else   if(cnt_1us== CNT_1US_MAX)         cnt_1us <=6'b0;    else       cnt_1us <=cnt_1us + 1'b1;//cnt_1us_flag:1us计数器标志信号always@(posedgesclk ornegedgerst_n)    if(rst_n ==1'b0)       cnt_1us_flag <= 1'b0;       else   if(cnt_1us==  CNT_1US_MAX)        cnt_1us_flag <= 1'b1;    else       cnt_1us_flag <= 1'b0;//cnt_1ms:1ms计数器always@(posedgesclk ornegedgerst_n)    if(rst_n ==1'b0)       cnt_1ms <=10'b0;    else   if(cnt_1ms==  CNT_1MS_MAX && cnt_1us_flag ==1'b1)         cnt_1ms <=10'b0;    else   if(cnt_1us_flag ==1'b1)       cnt_1ms <=cnt_1ms + 1'b1;     //cnt_1ms_flag:1ms计数器标志信号always@(posedgesclk ornegedgerst_n)    if(rst_n ==1'b0)       cnt_1ms_flag  <=  1'b0;     else   if(cnt_1ms==  CNT_1MS_MAX && cnt_1us_flag ==1'b1)         cnt_1ms_flag <= 1'b1;    else         cnt_1ms_flag <= 1'b0;//cnt_1s:1s计数器always@(posedgesclk ornegedgerst_n)    if(rst_n ==1'b0)       cnt_1s<=  10'b0;    else   if(cnt_1s ==CNT_1S_MAX &&cnt_1ms_flag ==1'b1)       cnt_1s<=  10'b0;    else   if(cnt_1ms_flag ==1'b1)       cnt_1s<=  cnt_1s+1'b1;//cnt_1s_flag:1s计数器标志信号always@(posedgesclk ornegedgerst_n)    if(rst_n ==1'b0)       cnt_1s_flag <= 1'b0;    else   if(cnt_1s ==CNT_1S_MAX &&cnt_1ms_flag ==1'b1)       cnt_1s_flag <= ~cnt_1s_flag;   //led:一个LED灯always@(posedgesclk ornegedgerst_n)    if(rst_n ==1'b0)       led<=1'b0;      else   if((cnt_1s_flag ==1'b1 &&cnt_1ms <= cnt_1s)|| (cnt_1s_flag  == 1'b0 &&cnt_1ms >cnt_1s))       led<=1'b1;    else         led<=1'b0;//添加要观察的信号名    `probe(rst_n          );  //Sub-modules can also have `probe()    `probe(cnt_1us        );  //Sub-modules can also have `probe()    `probe(cnt_1us_flag  );  //Sub-modules can also have `probe()    `probe(cnt_1ms       );  //Sub-modules can also have `probe()    `probe(cnt_1ms_flag  );  //Sub-modules can also have `probe()    `probe(cnt_1s         );  //Sub-modules can also have `probe()    `probe(cnt_1s_flag   );  //Sub-modules can also have `probe()    `probe(led            );  //Sub-modules can also have `probe()endmodule//--------------------------------------------------

5、将上面编写好的Testbench代码和RTL代码放到一个文件中(Testbench在上面,RTL代码在下面,仅在该平台仿真时可以将两种文件放在一起,在其他平台仿真时要独立放到两个.v文件中),然后复制粘贴到代码编辑框中,点击“Submit(new window)“执行仿真。

b668b8b348347bfe2de773b7656b5348.png

6、也可以将写好的Testbench代码和RTL代码放到同一个.v文件中,然后点击下面的代码编辑框下面的“Upload a source file...”,在展开的界面中选择添加.v文件后,再点击”Upload and simulate”启动仿真。

ac068f5ebe796c8ffb5f3652adb27ab9.png

97c177f6ac9f31b9fcb2d1df5493a359.png  

7、仿真波形如下所示,因为界面空间有限,拖动波形显示框下面的滚动条,可以看到后面的波形显示。 

7136e1fb87460afdb7af0cf0faacc098.png

8、在波形显示框中右击鼠标可以选择保存为PNG格式或SVG格式,将完整的波形信息保存下来。

5859bd33ea8a5139b6b9f7238d6816de.png

9、保存为SVG格式后的完整波形图如下所示。

0c6429751ac348e8e20fde40aea94c7e.png

10、如果我们在第58行处代码设置一个错误后,再点击执行仿真,此时在仿真窗口中不会显示波形,而是提示错误的内容,将错误修改后再执行仿真即可。

ce0ede2ea039988de95685d238b08fb0.png

f900abf986ae078afcde29a98fa693b5.png

11、该网页还有其他更多有趣的功能,如组合逻辑代码编写训练、时序逻辑代码编写训练、单片机嵌入式仿真等等,有兴趣的朋友可以自己探索,这里不再一一演示。

56625741896aa433ce1f959ad1302188.png

关于答案所有题目没有标准答案,github上很多答案,大家在遇到问题的时候可以去搜索参考,建议遇到问题多思考,才能学能所用。

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

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

相关文章

Python的下载及安装

1、官网下载地址&#xff1a;https://www.python.org/downloads/ 2、python设置环境变量&#xff1a; 在系统变量里添加Python的安装位置 3、在cmd里输入python里即可转载于:https://www.cnblogs.com/fun0623/p/5257573.html

使用Apache ActiveMQ的JMS开发基础

去年是我尝试JMS的时候。 背后的想法和概念让我有些困惑&#xff0c;但是当我知道它的用途后&#xff0c;我很快就掌握了它。 在本文中&#xff0c;我将展示使用Apache ActiveMQ作为后端使用Java开发简单的生产者/消费者的基础。 让我们首先从概念开始&#xff0c;这是一个简单…

PLSQL 经常自动断开失去连接的解决过程

问题背景&#xff1a; 情况是这样的&#xff0c;很多开发同事的PLSQL上班时间开着8个小时&#xff0c;有时候他们出去抽烟后或者中午吃完饭&#xff0c;回来在PLSQL上面执行就报错无响应&#xff0c;然后卡住了半天动弹不了&#xff0c;非得重新登录plsql才生效&#xff0c;我猜…

使用Cobertura,JUnit,HSQLDB,JPA涵盖您的测试

你好&#xff01;你好吗&#xff1f; 今天让我们谈谈一个非常有用的工具&#xff0c;名为“ Cobertura”。 该框架与我们在另一篇文章中看到的Emma框架具有相同的功能。 Cobertura和Emma之间的主要区别在于Cobertura显示带有图形的简历页面。 如果要查看有关该主题的其他主题…

C# 基础知识总结

要学好C#&#xff0c;基础知识的重要性不言而喻&#xff0c;现将常用到的一些基础进行总结&#xff0c;总结如下&#xff1a; 01. 数据类型转换&#xff1a; 强制类型转换(Chart--> int): char crA; int i (int)(cr); 02. 委托/匿名函数/Lamda表达式&#xff1a; 委托是匿…

使用Jolokia和JMX进行客户端服务器监视

Java监视工具的选择非常广泛&#xff08;由Google提供的随机选择和顺序&#xff09;&#xff1a; javamelody 压力探头 JVisualVM 控制台 贾蒙 Java JMX Nagios插件不适用 此外&#xff0c;还有各种专用工具&#xff0c;例如ActiveMQ &#xff0c; JBoss &#xff0c; Qu…

图书管理系统数据字典_2. 结构化——数据字典

返回目录&#xff1a;Chilan Yuk&#xff1a;软件工程分析设计图库目录​zhuanlan.zhihu.com一、基本知识用于定义数据流和数据存储的结构&#xff0c;并给出构成所给的数据流和数据存储的各数据项的基本数据类型。数据字典中应该包括关于数据的如下信息一般信息&#xff08;名…

重复次数最多的 子串_每日算法系列【LeetCode 424】替换后的最长重复字符

题目描述给你一个仅由大写英文字母组成的字符串&#xff0c;你可以将任意位置上的字符替换成另外的字符&#xff0c;总共可最多替换 k 次。在执行上述操作后&#xff0c;找到包含重复字母的最长子串的长度。示例1输入&#xff1a; s "ABAB", k 2 输出&#xff1a; …

python基础(一)简单入门

一.第一个python程序 1.交互式编程 直接在命令行里面输入python即可进入python交互式命令行&#xff0c;linux下一样&#xff1a; 在 python 提示符中输入以下文本信息&#xff0c;然后按 Enter 键查看运行效果&#xff1a; 2.脚本式编程 把代码都写到文件里面&#xff0c;然后…

unbuntu 启动任务脚本_Ubuntu下服务启动脚本编写

像Nginx、MySQL等服务一样&#xff0c;在后台运行自己编写的抓取天气信息的Python脚本。1.以管理员权限新建一个服务脚本文件sudo vim /etc/init.d/weather_service2.用下列模板修改该服务脚本文件#!/bin/bash### BEGIN INIT INFO## Provides: weather_service# Required-Start…

iOS开发工具——网络封包分析工具Charles

作者 唐巧 发布于 2013年12月9日 | 1 讨论 分享到&#xff1a;微博微信FacebookTwitter有道云笔记邮件分享稍后阅读我的阅读清单简介 Charles是在Mac下常用的截取网络封包的工具&#xff0c;在做iOS开发时&#xff0c;我们为了调试与服务器端的网络通讯协议&#xff0c;常常需要…

Java Web托管选项流程图

我经常被问到的一个问题是在何处以及如何托管Java Web应用程序。 可以在带有嵌入式服务器的Eclipse中创建它很好&#xff0c;但是如何将它带给人们呢&#xff1f; 长期以来&#xff0c;对于发烧友的程序员一直没有答案。 只有昂贵和超大型的选择。 事情最近变了&#xff0c;但这…

使用Regions ADF 11g进行Master Detail CRUD操作

你好 此示例演示了如何使用Regions在表之间创建Master Detail关系。 区域的主要目的是可重用性的概念。 使用区域和有限的任务流&#xff0c;我们可以将页面重用到许多其他页面中&#xff0c;以保持相同的功能并采用更简洁的方法。 下载示例应用程序。 在此示例中&#xff0c;…

win7 mysql php apache myadmin_windows下Apache+mysql+php+phpMyAdmin的安装及配置 | 学步园

1、下载Apache ( httpd-2.2.25-win32-x86-no_ssl.msi )http://httpd.apache.org/download.cgi#apache24根据提示安装到路径(建议自定义路径)&#xff0c;NetWork Domain和Server Name都输入 localhost(访问时使用的域名);2、下载mysql (mysql-5.5.34-win32.msi )http://dev.m…

具有NetBeans,嵌入式GlassFish,JPA和MySQL数据源的Arquillian

这是一个偶然的帖子。 我一直在研究交易CDI观察者&#xff0c;并尝试使用嵌入式GlassFish对它进行一些集成测试。 但是令人惊讶的是&#xff0c;这种方法不能很好地工作&#xff0c;我仍在弄清楚&#xff0c;使用普通的嵌入式GlassFish时问题出在哪里。 同时&#xff0c;我转到…

jsp mysql 音乐网站_Maven+JSP+SSM+Mysql实现的音乐网站

项目简介本系统基于MavenJSPSSMMysql实现的音乐网站。主要实现的功能有音乐播放、下载、上传等几个模块。难度等级&#xff1a;中等技术栈编辑器Eclipse Version: 2020-03 (4.15.0)前端技术基础&#xff1a;htmlcssJavaScript框架&#xff1a;JQueryBootstrap后端技术SpringSpr…

持久化API(JPA)系列(三)实体Bean的开发技术-建立与数据库的连接

在EJB 2.x中。EJB有3种类型的Bean。各自是会话Bean&#xff08;Session Bean&#xff09;、消息驱动Bean&#xff08;Message-Driven Bean&#xff09;和实体Bean&#xff08;Entity Bean&#xff09;。 随着EJB 3的推出&#xff0c;EJB2.x中的实体Bean逐渐被JPA规范所替代&…

【SAP业务模式】之ICS(四):组织单元的配置

SAP的ICS业务后台配置主要有以下几个配置点&#xff1a; 1、组织单元的配置&#xff08;公司代码、销售组织、工厂、采购组织等&#xff09;&#xff1b; 2、主数据的部分&#xff1b; 3、订单和开票的定价过程&#xff1b; 4、开票输出类型&#xff1b; 5、公司间发票的配置&a…

Twitter4j和Esper:在Twitter上跟踪用户情绪

对于复杂事件处理和Twitter API的新手&#xff0c;我希望这是一个简短的教程&#xff0c;可以帮助他们Swift起步。 管理大数据并从中挖掘有用的信息是当前技术中最热门的讨论主题。 来自Twitter&#xff0c;Facebook和Linkedin等社交网络的半结构化数据的爆炸式增长使Hadoop&am…

webase crud查看所有表_Laravel-Gii 可视化代码生成工具 CRUD +GUI

Laravel-Gii 可视化代码生成工具 CRUD GUI适用于快速B端后台开发&#xff0c;根据MySQL的表结构生成对应的Model、Observer、Controller、View、Route等相关项目文件[TOC]注意因为是解析MySQL的表结构&#xff0c;并且根据字段生成模板&#xff0c;所以目前生成的Model类时只支…