热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何在“浏览器”里实现一个云端EDA

本文介绍了一种在浏览器里编辑代码、仿真、看log、看波形的方法。django介绍django是一个由python实现的web后端框架。这里“后端”就是指在服务器上执行的程序(前端程

本文介绍了一种在浏览器里编辑代码、仿真、看log、看波形的方法。


django介绍

django是一个由python实现的web后端框架。这里“后端”就是指在服务器上执行的程序(前端程序在浏览器里执行)。django采用了 MVT 的软件设计模式,即模型(Model),视图(View)和模板(Template)。这种MVT的设计思想让数据与表现形式分开,从而编写的程序更容易理解和维护。

django的结构大致如下图。简单地讲,浏览器提交的请求,经apache执行后,送给django。django先解析url,根据url调用不同view函数。view函数操作数据库,把数据填进模板得到html,view把html送回给浏览器。这里返回的信息不仅仅是html,也可以是text文本、json、图片、视频等各种格式的信息。


在“浏览器”里实现云端EDA

我们的云端EDA分为三部分:浏览器里的IDE(包括代码编辑器、log显示、波形查看、操作按钮等)、web后端实现(处理浏览器的请求、调用EDA服务器api执行、返回信息给浏览器等)、EDA服务器(接收web后端的eda指令,如编译、仿真等,调用eda)。

 要实现“浏览器里的IDE”,主要需要Javascript。代码编辑器只不过是一个加强版的textarea,实现了行号显示、代码高亮、自动缩进等功能。这部分有现成轮子可以调用,比如CodeMirror(https://codemirror.net)、Ace(https://ace.c9.io)等。


点击“仿真”之后发生了什么?

当代码写完,点击“Run”按钮后,浏览器把代码传输给web服务器,并将代码存储在指定的目录。这里的目录可以是“用户名+项目名”的形式,避免与其他用户或者其他项目冲突,也可以是“当前时间+随机数”的形式。在代码传输时,为了避免特殊字符,可以用base64将代码编码。如果需要减小传输数据量,可以先压缩后传输。

代码存储好后,django的view函数具体实现了仿真调用,比如用subprocess.Popen(),后台调用eda服务器的相关api(简单的,可以只是一个sim脚本)。这里一般有几点需要注意:


  1. view函数要做成异步执行,即eda开始仿真后,立即返回信息通知浏览器。仿真过程可能持续很长时间,比如几分钟、几个小时,浏览器不可能一直等在那里。

  2. 在仿真的过程中,需要实时显示仿真的状态,比如浏览器里能实时显示log。因为上面把仿真设成异步了,就需要浏览器定时查询。比如每2秒或者5秒,查询仿真的log和状态。

  3. 当然浏览器里也可以用websocket来实现。用websocket有一个好处,就是不会超时,并且服务器可以主动给浏览器发消息。这样就避免了定时查询带来的资源浪费。


下面来讨论另一个问题:如何实现在浏览器里查看仿真波形?

查看波形仍然是当前数字设计和验证最有效、最直观的调试方法。但VCD波形一般比较大,很难直接传递给浏览器,另外也会有很长时间的延迟,影响使用体验。

几种可能的解决方案:


  1.  压缩。压缩成tar.gz,或者其它自定义的格式。如果压缩后小于5MB,就会感觉不到延迟。如果压缩后20MB,就会要稍微等一会儿。如果是100M,就需要等较长时间。当然压缩后100M也可以存储很多波形信息了,可以应付常见的模块级设计。

  2. 波形切片。在服务器仿真时把波形存储很多小文件,比如10M左右。用户浏览波形时,需要看前面或者后面的波形时,可以点“向前”或“向后”的按钮从服务器快速加载。因为文件小,所以速度也快。但有一个问题,就是需要缩放时,比如缩放到full,需要加载全部波形,这会变得很慢。

  3. 另外一种可行的方案,浏览器把开始时间、结束时间、波形显示窗口宽度告诉服务器,在服务器端把指定时间段的波形截出来,并处理成浏览器可以显示的大小的图片。这样服务器把处理后的图片传送给浏览器,一般这样的矢量图片,可以控制在几十K以内。浏览器收到后,直接显示。当然浏览器需要实现时间刻度和鼠标的放大、缩小、划选等操作,触发这些操作后,从服务器重新取一幅矢量图替换掉,这样就实现了波形的放大和缩小。

综上,方案3是最可行的方案,能满足几乎所有的设计场景。有人担心这个服务器端的波形处理程序会不会太占资源或者太慢?其实,我们可以这样想,一台服务器上同时开着20个Verdi肯定不慢。这里的波形处理程序也同样可以用C/C++来实现,不一定要用python。

这样,我们就简单实现了在浏览器里仿真和调试。


做这样一个浏览器EDA有什么意义呢?

我觉得,首先,可以用于学习、培训。教程与实验融合,边学边练,轻量级实验,无需本地实验环境。edaplaygroud(http://edaplayground.com)是一个很好的例子,这是国外的培训机构doulos提供的学习平台,支持vcs、xcellium这样的商业软件,也支持常见的开源软件。

其次,如果可以与国产EDA公司达成合作,在后台支持这些国产EDA,那么用户无需安装就可以立即试用和体验。势必可以起到宣传、促进和普及国产EDA的作用。也会给合作的国产EDA公司带来新用户、新订单和收益。


最后,说一说我对国产EDA的观点。

当下国产EDA公司如雨后春笋般出现,谁能最终胜出,就看EDA产品能否真正解决客户的问题,能否满足客户日益增长的新需求。真正让客户感觉到能用、好用、还想用。



推荐阅读
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 20211101CleverTap参与度和分析工具功能平台学习/实践
    1.应用场景主要用于学习CleverTap的使用,该平台主要用于客户保留与参与平台.为客户提供价值.这里接触到的原因,是目前公司用到该平台的服务~2.学习操作 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • 本文介绍了如何使用PHP向系统日历中添加事件的方法,通过使用PHP技术可以实现自动添加事件的功能,从而实现全局通知系统和迅速记录工具的自动化。同时还提到了系统exchange自带的日历具有同步感的特点,以及使用web技术实现自动添加事件的优势。 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 禁止程序接收鼠标事件的工具_VNC Viewer for Mac(远程桌面工具)免费版
    VNCViewerforMac是一款运行在Mac平台上的远程桌面工具,vncviewermac版可以帮助您使用Mac的键盘和鼠标来控制远程计算机,操作简 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • 生成对抗式网络GAN及其衍生CGAN、DCGAN、WGAN、LSGAN、BEGAN介绍
    一、GAN原理介绍学习GAN的第一篇论文当然由是IanGoodfellow于2014年发表的GenerativeAdversarialNetworks(论文下载链接arxiv:[h ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
author-avatar
nuabolalalala5_760
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有