新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > System C特點及FPGA設計

        System C特點及FPGA設計

        作者: 時間:2010-12-11 來源:網絡 收藏

          
        2.過程
          
        模塊中的處理過程(process)類似于C語言中的子程序,與C語言中的子程序不同的的是它具有HDL語言中的觸發功能。處理過程(process)的具體工作部分被保存為.cpp文件。處理過程的調用類似于在C語言中子程序的調用。根據不同的要求,C中有三種處理過程。
          ● Methods : SC_METHOD()
        ● Threads : SC_THREAD()
        ● Clock Threads : SC_CTHREAD() SC_METHOD是用來描述組合邏輯,它由輸入信號的變化觸發,但不能在兩次調用中保存控制狀態。并且在SC_METHOD中不能包含無限循環。由于組合邏輯有可能導致毛刺的產生,從而影響系統性能,所以SC_METHOD不易太復雜。

        下面是一個簡單的SC_METHOD例子:


        SC_MODULE(example) {
        sc_in din;
        sc_out dout;//端口
        void inverter();//處理過程聲明
        SC_CTOR(example) {
        SC_METHOD(inverter);
        sensitive(din);//處理過程由輸入變化觸發
        }
        };
          
        處理過程inverter如下:
        void example::inverter() {
        bool internal;
        internal = din;//輸入數據取反后由輸出端口輸出
        dout = ~internal;
        }
          
        SC_THREAD是最常用的處理過程,基本上可以用在任何地方。它是由輸入信號的變化觸發,但與SC_METHOD不同的是它可以在兩次調用這保存控制狀態。它的功能類似于積存器的功能。SC_THREAD中可以包含有wait()函數,這使得處理過程可以被掛起。

        SC_CTHREAD是SC_THREAD的一種特殊情況。SC_CTHREAD能產生更好的綜合效果。SC_CTHREAD中可以使用wait()函數。在不同的狀態間加入wait()函數,人員可以用SC_CTHREAD來實現狀態機。這種風格是簡便的而且容易理解。SC_CTHREAD只能由時鐘信號沿觸發,而SC_THREAD可以由其它非時鐘信號觸發。如果在時鐘上跳邊觸發,可以使用pos()函數,反之用neg()。

        為進一步說明SC_CTHREAD,下面給出了一個SC_CTHREAD的例子。

        SC_MODULE(example) {
        sc_in_clk clock;//輸入時鐘
        sc_in trigger, din;
        sc_out dout;
        void invert();
        SC_CTOR(example) {
        SC_CTHREAD(toggler, clock.pos());//時鐘上升沿觸發
        }
        }
        void example::invert() {
        bool last = false;
        for (;;) {
        wait_until(trigger.delayed() == true);//等到下個時鐘上升沿 //且trigger=1再執行
        last = din; dout = last; wait();
        last =~din; dout = last;wait();//下個上升沿才更改數據
        }
        }
          
        3.端口與信號
          
        與HDL語言相似,使用 C庫就可以在C程序中加入端口和信號。這些原先C語言中沒有的功能,使更復合硬件設計的要求。
        模塊與模塊之間是通過端口信號加一聯系。只要兩個端口被連接在一起,信號就可以在它們之間進行傳遞。對于這一點習慣用HDL進行設計的設計人員是很容易理解和接受的,因為這和HDL中端口的功能是一樣的。 信號只是在一個模塊的內部使用,這也是和HDL中信號的用法是一致的。 下面給出端口和信號聲明的例子。

        sc_in“類型”> din// 輸入端口din
        sc_out“類型”> dout// 輸出端口dout
        sc_inout“類型”> q// 輸入輸出端口q
        sc_signal i[16]; //創建一個具有16比特的邏輯型信號i
          
        4.數據類型
          
        考慮到硬件設計的要求, C中也加入了一些硬件設計中常用的數據類型。具體如下:

        sc_int 有符號整數類型,最大有64個比特位。
        sc_uint 無符號整數類型,最大有64個比特位。
        sc_bigint 有符號整數類型,任意比特位,其最大比特位定義在
        sc_constants.h中。
        sc_biguint 無符號整數類型,任意比特位,其最大比特位定義在
        sc_constants.h中。
        sc_bit 二值數據,單比特位。
        sc_logic 四值數據,單比特位。
        sc_bv 二值數據,任意比特位。
        sc_lv 四值數據,任意比特位。
        sc_fixed 參數固定的有符號定點數。
        sc_ufixed 參數固定的無符號定點數。
        sc_fix 參數不固定的有符號定點數。
        sc_ufix 參數不固定的無符號定點數。
        User defined structs 用戶自定義結構
          
        以上是一些System C的基本概念。
          
        五、結論
          

        System C是一種很有效的設計方法,它不僅可以幫助設計人員完成一個復雜的系統設計,還可以避免傳統設計中的各種弊端,并提高設計人員的工作效率。它的這些優點使System C在復雜的系統設計中大有作為。并且習慣用HDL的設計人員,可以很容易地轉到用System C設計。

        本文引用地址:http://www.104case.com/article/151249.htm

        上一頁 1 2 3 下一頁

        關鍵詞: 設計 FPGA 特點 System

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 中山市| 年辖:市辖区| 雅江县| 大庆市| 建水县| 秀山| 湟源县| 达州市| 万载县| 邵东县| 民和| 青河县| 科尔| 库尔勒市| 广饶县| 颍上县| 阳谷县| 茶陵县| 凌云县| 大兴区| 大英县| 闽侯县| 无极县| 策勒县| 鹤庆县| 富裕县| 陇西县| 齐河县| 华池县| 乌审旗| 灵台县| 景德镇市| 丰镇市| 郯城县| 米易县| 拉萨市| 贵南县| 毕节市| 慈溪市| 新巴尔虎右旗| 峡江县|