如何利用计算机语言实现芯片仿真功能
    老师留了这么一个题目:利用软件实现大学数字逻辑电路的仿真实验(不包扩时序电路部分),我想了很久连线问题可能还可以,可是74LS系列的芯片如何解决呢希望大虾们出手相帮我现在有一思路不知能否值得推敲(毕业设计老师给否定了)
   我想:芯片仿真功能和编译原理有异曲同工之处,我先用TC++把芯片建成一些类库,每个芯片的逻辑功能可以分为该类的公共函数函数可分为(输入,输出,转换)等;
   我想:DELPHI将芯片导线的搭接程序执行相应的C++代码,当需要执行看结果时,将C++代码进行调整次序生成正常的C++文件利用WINEXEC进行编译C++,C++生成相应的记录文件,DELPHI通过读取
C++生成的记录文件把数据取出来在赋值给DELPHI上的控件做指示灯的亮灭状态,
  我的这种方法就是想通过可视化操作来动态生成TC++文本文件然后通过TC++的编译把结果传给记录文件,DELPHI能识别这个文件就算成功了
  不过我的老师不同意我的方案我想让诸位大虾查验一下我的思路能否可行谢谢了  

解决方案 »

  1.   

    我在学数字电路时也有老师对我说,毕业设计可以做这个
    我觉得真的很难(主要感觉是麻烦,要做那么多芯片的功能,虽然有些功能可以共用)
    我选择做一个MIS
    只能帮你UP
      

  2.   

    myling(阿德) 当然不是
    他要用这个毕业设计进行仿真实验
    是个真家伙的
      

  3.   

    *********************引用*********************************
    我的这种方法就是想通过可视化操作来动态生成TC++文本文件然后通过TC++的编译把结果传给记录文件,DELPHI能识别这个文件就算成功了
    ***********************************************************如果我没理解错,你想动态生成代码——再编译——执行——输出结果,是这样吗?
    这样的话你还不如做一个解释器,动态生成代码——解释执行——输出结果,如果这样的的方法可以解决你的问题,那么请去下一个解释器的组件来用就好了,而你自己要做的就是实现动态生成代码的功能。仿真芯片我不懂,以上全部是依照我理解你那段话的意思提出的建议。至于解释器的组件,网上很多可以解释PASCAL代码的,我知道一些,估计C++也不少,那就要你自己去找了。
      

  4.   

    解释动态生成代码可以使用InnerFuse Pascal Script组件
    我认为使用OOP处理线路连接,说的轻松,做起来,呵呵,难了
    你知道EWB吗?一个很著名BC++写的电子线路分析软件,你可以参看的
    Up
      

  5.   

    74系列芯片都是逻辑电路,有与和或组成的门电路,
    在数字电路的书中有其内部结构,
    VHDL语言如果熟悉的话,则EASY。
    后面的问题只是如何写函数处理的。
      

  6.   

    写个函数,传入参数为一数组 BOOLEAN,
    代表74的输入引脚,
    返回也是一个数组,代表74的输出引脚。
    对于每一个芯片,都应有一个对应的函数。
      

  7.   

    (一点小的想法,不只对你有没有帮助,如果说得不正确,请见谅!))
    *********************************************************************************
    我的想法:
         你要做的可能类似于常见的一些电路制作软件,但在某些方面比其要复杂一些。你将各种芯片(包括74LS系列)制成图形控件,像你说的那样,建立组件库,以便用户使用。当用户将空间放置到窗体上时,程序自动生成其对应的代码,并根据用户的联线,对它的一些属性和事件进行初始化处理(比如74LS系列的电源属性、接地属性、输出管脚等),并将其生成pas代码文件。你可以从网上down一些能够解释或编译pas的东东,在后台对其进行编译或解释,然后调出运行画面即可。
    *********************************************************************************
      

  8.   

    我是弱电出身的,但是我不会,不过觉得 fwjingling(蓝精灵)和baoyuanzhi() 说的有道理。
      

  9.   

    大学数字逻辑电路的仿真实验(不包扩时序电路部分),
    ------------------------------------------------!!!!!这样行不行?将74LS系列的芯片,比方芯片A,有32根引脚,因为每根引脚都有不用的功能,
    所以你将芯片A写成一个函数,它包括32个参数(可怕),然后做成一个控件,
    等待用户的使用,联线时,如果连上1-23号引脚,则1-23号参数置1,执行各自的
    功能,其余置0,不用管他.这样,如果你的控件内部逻辑和外部接口没问题,不管用多少控件,
    都只是纯函数调用问题,够软了吧?
    主要是没有时序电路,74LS系列的芯片的功能也比较简单,应该不难实现
    而且大部分的函数可以通用,比如电源、接地、与、或、非等等
    加油吧,你这个课程设计不错,挺有创意,
    我的是做网站 :-(  
    现在我正在一家公司打工,为了换一个毕业设计
      

  10.   

    74LS系列到是用过,一大堆的and or not 门,应该先要有个函数库吧....没有细致想,帮你up吧
      

  11.   

    大家的想法和贴子真的很有价值啊,不过我觉得要是一个一个做芯片控件(阿德)真得很难受,
    如果是做动态生成代码的那种方案,我想还是生成C++代码的原始方案通过文件记录来传递数据0,1
    我想问一下我的这种方案和众网友的DOWN OOP解释器组件做动态代码的推荐方案是否都有可行性啊
    OOP解释器组件的那种比我自己生成C++的那种解决方案能否详细对比一下吗????
       要知道我的毕业设计老师是很保守的他并不认为有动态生成代码并解释执行的必要,用他的话说这个题目不需要做组件,更不需要后台执行什么怎么连的就用记录体或者是BOOL变量就能实现了
       寒假前我也这样认为不过我确实琢磨不透他的解决方案啊,我是对这个毕业设计感兴趣才选的题目不过,也做了好多的方案和想法才得到了上面的想法、,我想知道我的方法(楼主问题)有可行性吗????
      

  12.   

    Hi. 我本科是学自动化的。 我想我可以给出一些建议。首先,逻辑电路图用数据结构来表示的时候,应该是一个有向图。
    图上的每一个节点是实物的集成电路单元或者连接点。
    然后,你必须软件实现各个种类的逻辑电路单元和连接点单元。
    这样,根据这些部件,你就能够建立一个表示具体电路的有向图。 状态的转换可以通过多次的扫描获得。当输入状态确定后,你必须对各个节点进行扫描,
    直到他们的电平不再变化,这在物理上可以理解为电平建立的时间。 当图的状态确定后,
    输出状态也随之确定。 这样,你就可以获得相应的输出。个人建议,仅供参考。我们以前有人做 PLC 软件模拟的时候也是用了多次扫描这个原理。
      

  13.   

    baoyuanzhi() 的意见好象就是你老师的方案哦,你可以和他详细谈。
    我声明了我的意见只是针对你那段话的。既然老师不同意,应该听他的。
      

  14.   

    baoyuanzhi()、: fermium(列御寇) 两位大虾: 我也是受到VHDL,EDA的启发才想到我上述的方案的不过苦于这套仿真软件的设计国内十分少见,相关的参考资料少而又少无论对我自己,还是对带我的老师来说可能都是挑战啊我相信我的实力如果按我的方案做我会成功的,不过我找不到相应的理论来做支持仅仅是一个VHDL,EDA恐怕还不能说明问题的,要知道我们学校的老师可是理论工作者啊如果我真的在这段时间找不到类似的成功案例或者是正宗的门派学说做我的挡箭牌的话那么我担心老师们会觉得我的独门功夫只不过是瞎胡闹的啊,要知道老师毕竟是老师,老师不是老板,东西好了老板会高兴,老师们往往喜欢著书立说,一旦好多老师在未来的答辩中对这个东东认识不足或者只是想当然,或者他们在大学的时候也是荒废了学业(我说的是假设,因为我们的老师却是很自负的)我担心我会砸在他们的手中毕竟王选那样的泰斗现在还不是普遍,希望大家能够继续踊跃讨论啊
      

  15.   

    ttapi(我爱虫虫) 的方案我最初也考虑过了,利用有向图表达数据结构确实是个好思路,不过随后的多行遍历扫描算法恐怕太占用机器时间了,这样的程序我因为效率一定不是很高的,相对于EDA来说,电路设计图的修改和备份工作是很困难的
    baoyuanzhi()、: fermium(列御寇) 两位大虾: 我也是受到VHDL,EDA的启发才想到我上述的方案的不过苦于这套仿真软件的设计国内十分少见,相关的参考资料少而又少无论对我自己,还是对带我的老师来说可能都是挑战啊我相信我的实力如果按我的方案做我会成功的,不过我找不到相应的理论来做支持仅仅是一个VHDL,EDA恐怕还不能说明问题的,要知道我们学校的老师可是理论工作者啊如果我真的在这段时间找不到类似的成功案例或者是正宗的门派学说做我的挡箭牌的话那么我担心老师们会觉得我的独门功夫只不过是瞎胡闹的啊,要知道老师毕竟是老师,老师不是老板,东西好了老板会高兴,老师们往往喜欢著书立说,一旦好多老师在未来的答辩中对这个东东认识不足或者只是想当然,或者他们在大学的时候也是荒废了学业(我说的是假设,因为我们的老师却是很自负的)我担心我会砸在他们的手中毕竟北大王选那样的老泰斗现在还不是普遍,希望大家能够继续踊跃讨论啊
      

  16.   

    这学期开了数字电子技术,学到逻辑函数的化简的时候需要将一个逻辑函数化简为最简形式,
    比如:_ _  _ __
        Y=ABC+AC+BC
    可以化简为            __
        _ _    _ _  _  _  _  _ _
      Y=ABC+(A+B)C=(AB)C+(AB)C=C
    算法是否考虑卡络图?
    现在用程序来实现化任意逻辑函数为最简形式,我是菜鸟,今天从中午到现在没出门也没能编出来,请高手帮忙,最好给出程序!!!
    我300分全给他!
      

  17.   

    B52(CTG) 这是作业题吗??
      

  18.   

    74l系列芯片绝大部分是组合逻辑芯片主要是逻辑与或非的逻辑预算功能我的毕业设计要求不包括时序电路部分,大学数字电路实验主要是观察LED灯的变化不需要观察波形至少我们计算机同学不需要的我的毕业设计要求能实际做一些逻辑电路实验:想最简单的三人举手表决,74LS181逻辑预算等等
      

  19.   

    觉得该程序还是要往深层次考虑,不考虑芯片的具体型号肯定不可以,至少也要把芯片分成若干大类来考虑。有向图的是一个描述数字电路图的直观方法,但我觉得该程序如果有有向图作为基本数据结构来说肯定存在很大的困难,首先是出错处理。按照有向图的逻辑构成来说,如果这个布线结构是正确的,按照ttapi(我爱虫虫)的说法是可以通过扫描建立各点的电位信息,但是计算量将会随着节点的增多疯狂增长,我觉得算法复杂度应该在O(n!)。这种算法复杂度在实际中基本认为是不被允许的;这还好,毕竟是可以实现,但是一旦出现错误,程序根本无法检测错误,因为你无法知道错误是谁产生的(当你扫描到一个有向图节点发现错误(我还不知道怎么算发现错误)后,其错误一般不会是该节点产生),此时你将无法判断错误来源,况且错误的定义本身就很难,除非有事先答案,比如说节点A高电平为对,如果为低一定错,但是一般设计中很难有这样的界定。
    所以我觉得该系统一定不能对图来做判断,应该是从图中得到信息变成逻辑表达式,然后利用编译原理检验逻辑文法的正确与否。所以需要你对芯片作拆分,不过芯片拆分本身的工作量就很大,外加建立有基于向图算法的逻辑式生成器,检验并得出结论的逻辑编译器,my gold,建议你还是换课题吧。这个项目够5个毕业设计了。
    呵呵,一点小意见。
      

  20.   

    不拆分也可以,有些仿真设备的设计是采用经验数据库来完成,而且某些专业布线软件的确采用了经验数据库来完成。软件中将常用的多种布线方式和错误方式都建立了经验数据库,一旦出现布线设计,系统便在经验数据库中中寻找是否存在该种模式,如果匹配就直接通过数据库找出结果,没有的话再采用其他辅助判别方式。我记得当年在学校用maxplus做计算机组成实验的时候,有时候就会出现明明布线是完全一样,但是有时却会因为一些莫名其妙的事情,比如命名或线路标志符的位置而编译出错。此时应该就是合理的布线与经验数据库中的数据不匹配造成的(不过maxplus是否采用经验数据库我是不清楚的,只是猜想而已)。
    这个经验数据库的设计我觉得也完全可以作为一个数据库系统设计的毕业设计来完成了,如果你没有大量的数字电路设计经验,建立这样一个经验数据库恐怕不易。不过说实在的,大学的毕业设计很多都是开题时豪情万丈,论文写的文采飞扬,就是可执行程序功能超级欠缺。当年我好像也是一样,最后出的程序没有完成开题报告中我提到的1/4。反正最后答辩的时候你在讲论文和理论时多耗点时间就没有人会仔细看你的源程序了,因为那些答辩组的教授们好像也都是长于理论而欠于动手。呵呵。工程师和教授毕竟是两个领域的啊。
      

  21.   

    呵呵,看来我的方案一秒钟内就被枪毙了:)
    因为以前是用来仿真 PLC 的梯形图的,所以逻辑没有数字电路那么复杂。
    多次的扫描占用的时间并不是很明显。看来如果是对数字电路的话,这种方法
    只能作最差打算。继续关注该话题。
      

  22.   

    本人不熟悉弱电电路,不过有个好友是设计芯片的,熟悉VHDL 他的QQ号是5499219,你可以向他请教
      

  23.   

    用DELPHI做
    难度太高啦!!!!!!!!!!