2008年12月15日 星期一

用C語言模擬電路

困難度:★★★
我們在數位邏輯設計之類的課程裡常常會使用到一些數位電路模擬軟體,有時候蠻好奇那些模擬軟體到底是怎麼運作的,所以我們這次的Project將來處理這樣的問題。

程式的功能主要是讀取由使用者提供兩個檔案,其中之一的內容是描述元件和其之間的接線,另一個是儲存輸入腳位的波型;而程式讀入後,會根據接線的狀況和輸入的波型,模擬輸出腳位數值的變化。

剛開始程式會先分析邏輯描述檔案是否有接線上的錯誤。如果沒有錯誤就會進行模擬的階段,根據波形的改變分析邏輯閘輸出的變換。
##CONTINUE##
分析問題之後發現其實如果程式只是處理組合邏輯並不具有挑戰性,組合邏輯只需要把符號轉換成運算式處理就十分的簡單,所以我們的重點將放在時序邏輯和遞迴邏輯(像LATCH)上。

本次Project主要是Stacks and Queues的使用。Queues主要是用在檔案讀入描述式的分析和Functions之間數值串列的傳遞,而Stacks可以對需要處理運算的邏輯閘進行排程。

程式碼再修改一下就能有延遲的作用,如果未來有可能將作為自己在模擬數位電路時能使用的引擎。
Source Code下載(包含說明、模擬檔案等相關資料)
http://sites.google.com/site/hayden0828/blog/Simulator.rar

6 則留言:

  1. 你好!很想学习用C语言模拟电路,看了你的文章,找到高手了,不知道你能否把代码的实现借我参考学习一下,如果可以的话,发我邮箱1012046834@qq.com,很感谢哦!

    回覆刪除
  2. Source Code我附在文章後面了,裡面已經包含程式的使用方法和測試模擬的資料,可以參考看看喔。

    回覆刪除
  3. 真的很感谢,宝贵的资料,有什么不懂的地方再请教你。^_^

    回覆刪除
  4. 哈哈拙作稱不上寶貴,如果還有什麼問題歡迎指教切磋喔。

    回覆刪除
  5. hello 版主,有問題可否跟您討論一下~

    就是你這支程式,是否會面臨一個問題,

    假設有一Nand gate的兩個A,B input,
    而這兩個input的B的input需要先經過某個
    gate的運算得到的值,再放入B的input。

    但如果版主你先計算了Nand gate,而沒先計算input前面的gate的話,是否就會導致錯誤的output呢?

    我有看過版主的source code了,但不確定是否版主您有對此部份做出處理...

    回覆刪除
  6. 這問題是有可能的...不過我有做處理,當上一階的gate改變了輸出時,程式會將輸出影響到的gate再運算一次,如果再改變就會再推動下一層gate,直到所有的gate狀態都穩定了之後才會結束這一階段的Simulator。

    回覆刪除

Related Posts Plugin for WordPress, Blogger...