網頁

2010年10月20日 星期三

DE2-115 開箱

[Introduction]
大概9月初就拿到DE2-115這個新玩具,忙到最近才有空拿出來,照幾張開箱照,給想買的同學參考。

[Article]
DE2-115外盒
這一次的外盒頗有設計感
DE2-115 實驗板
表面看來大致上與DE2-70相仿,但是仔細看有許多地方不盡相同,其實有不少的改變。最明顯的是GPIO已經被換成HSMC的介面,也有將JTAG chain加入,將可以串接FPGA,一起燒綠,並高速交換資料。

DE2-115 下層內容物
這一次友晶的配件多附贈一個紅外線的搖控器,這樣就不需要到處去尋覓合適的配件。

CycloneIV 與記憶體們
DE2-115改採用CycloneIV的Device,容量上有不少的增進,速度時脈也有提升,SDRAM也倍數增加到128MB(64MB*2),但是可以注意到PCB的LAYOUT,兩顆SDRAM的位址與控制線都被接在一起,所以只能當作32bit的SDRAM來使用,要分該用應該很難了。 SRAM的部分,從SSRAM換成較好操作的2MB SRAM。Flash的部分LAYOUT也有修改,以往採用16-bit的資料線,現在改成8-bit,所以要注意一下位址線的用法不同。

GigaByte的Ethernet
Ethernet從常見的DM9000A,換成兩顆giga等級的Ethernet


電源
一改之前的linear的解決方案,改用National的解決方案,個人覺得還是Linear的方案比較簡潔。 這一次提供兩組JP,供使用者改變GPIO與HSMC的電壓準位,

側面
最後側面來一張

辛勞的DE2-70
滿是灰塵的DE2-70,但是想退休還早得很

2010年10月17日 星期日

SyntaxHighlighter加入TCL Brush

[Introduction]
續"SyntaxHighlighter加入Verilog Brush",
增加TCL Brush。

[shBrushTcl.js]
Download

[TCL Example]
#** OpenPPM -- opens and reads a PPM file
#**
proc OpenPPM {} {
    global readimg
    
    set types { {{PPM Files} {.ppm}} {{All Files} * }}
    set fname [tk_getOpenFile -defaultextension ".ppm" -filetypes $types]
    if {$fname == ""} return
    #::img::current config -file $fname
    $readimg config -file $fname
}

SyntaxHighlighter中加入Verilog Brush

[Introduction]
SyntaxHighlighter中預設沒有提供,
a. Verilog
b. VHDL
c. TCL
這三種設計數位電路常用的語言,因此必須依照SyntaxHighlighter的框架,
編寫shBrushVerilog.js加入\syntaxhighlighter_3.0.83\scriptsscripts資料夾中。 

SyntaxHighlighter色碼代號
  • comments 
  • keyword 
  • string 
  • preprocessor 
  • variable 
  • value 
  • functions 
  • constants 
  • script 
  • color1 
  • color2 
  • color3
 
[shBrushVerilog.js]
 剛開始可以使用shBrushCpp.js當作範本來修改,
兩個主要的工作,
a. 編輯shBrushVerilog.js。
b. 加入註冊shBrushVerilog.js的script加入到Blogger的範本中,即可使用。

/**
 * Tun-Kai Yao
 * tunkai.yao@gmail.com
 *
 * @ SyntaxHighlighter version
 * 3.0.83 (July 02 2010)
 * 
 * @copyright
 * Copyright (C) 2004-2010 Alex Gorbatchev.
 *
 * @license
 * Dual licensed under the MIT and GPL licenses.
 */
;(function()
{
    // CommonJS
    typeof(require) != 'undefined' ? SyntaxHighlighter = require('shCore').SyntaxHighlighter : null;

    function Brush()
    {
        // 字集
        // 資料型態    
        var datatypes = 'reg wire ' +
                        'integar unsigned ' +
                        'tri wand triand tri0 tri1 trireg supply0 supply1 ';
                        
        // 基本元件
        var primitives = 'and nand or nor xor xnor ' +
                         'buf not ' +
                         'bufif0 bufif1 notif0 notif1 ' +
                         'pullup pulldown ' +
                         'pmos rpmos nmos rnmos ';

        // 關鍵字
        var keywords =  'module endmodule ' +                        
                        'input output inout ' +
                        'begin end ' +
                        'parameter defparam ' +
                        'assign deassign always initial genvar ' +
                        'forever repeat disable wait ' +
                        'function endfunction' +
                        'task endtask ' +
                        'generate endgenerate ' +
                        'specify endspecify ' +
                        'posedge negedge ' +
                        'if else for while ' +
                        'case casex casez endcase default ' +
                        //'include timescale ' +
                        //'ifdef endif ' +
                        'celldefine endcelldefine ' +
                        'attribute ' +
                        'specparam  event' +
                        'fork join ';
        
        // Tasks
        var sysTasks = '$display $monitor $dumpall $dumpfile $dumpflush ' +
                       '$dumplimit $dumpoff $dumpon $dumpvars $fclose ' +
                       '$fdisplay $fopen $finish $fmonitor $fstrobe ' +
                       '$fwrite $fgetc $ungetc $fgets $fscanf $fread ' +
                       '$ftell $fseek $frewind $ferror $fflush $feof ' +
                       '$random $readmemb $readmemh $readmemx $signed ' +
                       '$stime $stop $strobe $time $unsigned $write';

        // 著色
        this.regexList = [
            { regex: SyntaxHighlighter.regexLib.singleLineCComments,    css: 'comments' },              // one line comments
            { regex: SyntaxHighlighter.regexLib.multiLineCComments,     css: 'comments' },              // multiline comments
            { regex: SyntaxHighlighter.regexLib.doubleQuotedString,     css: 'string' },                // strings
            { regex: SyntaxHighlighter.regexLib.singleQuotedString,     css: 'string' },                // strings
            { regex: /\b([\d]+(\.[\d]+)?|0x[a-f0-9]+)\b/gi,             css: 'constants' },             // value
            { regex: /^ *#.*/gm,                                        css: 'preprocessor' },          // #10
            { regex: /^ *`.*/gm,                                        css: 'preprocessor'  },         // `timescale
            { regex: new RegExp("[0-9]+['][bBoOdDhHeEfFtT][0-9a-fA-FzZxX_]+", 'g'), css: 'constants' },
            { regex: new RegExp(this.getKeywords(datatypes), 'gm'),     css: 'color2 bold' },
            { regex: new RegExp(this.getKeywords(primitives), 'gm'),    css: 'color3 bold' },
            { regex: new RegExp(this.getKeywords(sysTasks), 'gm'),      css: 'functions bold' },
            { regex: new RegExp(this.getKeywords(keywords), 'gm'),      css: 'keyword bold' }
            ];
    };

    Brush.prototype = new SyntaxHighlighter.Highlighter();
    // 註冊 verilog 標籤
    Brush.aliases = ['verilog']; 
    SyntaxHighlighter.brushes.Verilog = Brush;

    // CommonJS
    typeof(exports) != 'undefined' ? exports.Brush = Brush : null;
})();

[Verilog Example]
/* verilog
 */
`timescale 10/10

module rpa(
    rpa_i_a,
    rpa_i_b,
    rpa_i_ci,
    rpa_o_s,
    rpa_o_co
);

    input  rpa_i_a;
    input  rpa_i_b;
    input  rpa_i_ci;
    output rpa_o_s;
    output rpa_o_co;

    assign {rpa_o_co, rpa_o_s} = rpa_i_a + rpa_i_b + rpa_i_ci;
    
    //test code
    reg [15:0] testa;
    wire [15:0] testb;
    assign testa = 16'b0;
    assign testb = 16'h0;

    always@(posedge clk or negedge rst)
    begin
        if(!~rst) begin
        
        end
        else begin

        end
    end


endmodule

2010年10月16日 星期六

Blogger加入SyntaxHighlighter樣式

Source Link: SyntaxHighlighter


(一) 修改Blogger樣式
1.下載SyntaxHighlighter樣式, 下載連結 (版本 3.0.83)
2. 將SyntaxHighlighter解壓,並放入webserver (或者使用作者所提供的空間)
3. 加入javascript與css到Blogger範本 <b:skin> 標籤之前


4. Blogger範本</body>前呼叫

5. 文章中插入程式碼的呼叫方式
    a.
<pre class="brush: js">
    /**
     * SyntaxHighlighter
     */
    function foo()
    {
        if (counter <= 10)
            return;
        // it works!
    }
</pre>
   
    b.

<script type="syntaxhighlighter" class="brush: js"><![CDATA[
  /**
   * SyntaxHighlighter
   */
  function foo()
  {
      if (counter <= 10)
          return;
      // it works!
  }
]]></script>

測試

測試一下