CHISEL 點滴積累 之四

2021-09-11 09:42:50 字數 2933 閱讀 6642

今天嘗試一下函式和引數。

找乙個合適的例子。

package ******

import chisel3._

class acounter(size: int) extends module )

val r1 = reginit(0.u(size.w))

r1 := r1 + 1.u

io.out := r1

} println("generating the acounter hardware ")

chisel3.driver.execute(array("--target-dir","generated"),()=>new acounter(128))

//構造物件時候要注意將size具體賦給數值。

}

這裡注意acounter這個類就有了乙個引數size,在構造物件object的時候要具體化為某乙個指定的數值。

以下是生成的verilog**。我做了各種實驗希望生成的verilog**裡面帶有parameter引數,結果都失敗了。

module acounter( // @[:@3.2]

input clock, // @[:@4.4]

input reset, // @[:@5.4]

output [127:0] io_out // @[:@6.4]

); reg [127:0] r1; // @[counter.scala 8:19:@8.4]

reg [127:0] _rand_0;

wire [128:0] _t_10; // @[counter.scala 9:12:@9.4]

wire [127:0] _t_11; // @[counter.scala 9:12:@10.4]

assign _t_10 = r1 + 128'h1; // @[counter.scala 9:12:@9.4]

assign _t_11 = _t_10[127:0]; // @[counter.scala 9:12:@10.4]

assign io_out = r1; // @[counter.scala 10:10:@12.4]

`ifdef randomize_garbage_assign

`define randomize

`endif

`ifdef randomize_invalid_assign

`define randomize

`endif

`ifdef randomize_reg_init

`define randomize

`endif

`ifdef randomize_mem_init

`define randomize

`endif

`ifdef randomize

integer initvar;

initial begin

`ifndef verilator

#0.002 begin end

`endif

`ifdef randomize_reg_init

_rand_0 = };

r1 = _rand_0[127:0];

`endif // randomize_reg_init

end`endif // randomize

always @(posedge clock) begin

if (reset) begin

r1 <= 128'h0;

end else begin

r1 <= _t_11;

endend

endmodule

以上實驗的是引數化的實驗,結論是只能用class 構造物件的時候指定引數。

下面實驗一下函式def

package ******

import chisel3._

class acounter(size: int) extends module )

def inc_1(a:uint)=1.u + a ; //定義了乙個傳遞引數的函式

def inc_b(a:uint,b:uint)=a + b ; //定義了兩個傳遞引數的函式

val r1 = reginit(0.u(size.w))

//r1 := inc_1(r1)

r1 := inc_b(r1,1.u )

io.out := r1

} println("generating the acounter hardware ")

chisel3.driver.execute(array("--target-dir","generated"),()=>new acounter(128))

}

另外我也實驗了,函式定義可以寫在呼叫的語句之前,看下面**:

package ******

import chisel3._

class acounter(size: int) extends module )

val r1 = reginit(0.u(size.w))

//r1 := inc_1(r1)

r1 := inc_b(r1,1.u )

io.out := r1

def inc_1(a:uint)=1.u + a ;// 函式可以定義在呼叫之後

def inc_b(a:uint,b:uint)=a + b ;// 函式可以定義在呼叫之後

}println("generating the acounter hardware ")

chisel3.driver.execute(array("--target-dir","generated"),()=>new acounter(128))

}

下面這個實驗的**比較簡單就不上傳檔案了。

git點滴積累

1 一些入門的命令 進入你要傳到遠端庫的專案下 例 cd desktop order這裡是進入桌面的order資料夾中,接著輸入git init為了讓專案資料夾下有 git 檔案,可以輸入 ls a 命令檢視 git add 將當前目錄增加到倉庫中,那個 代表當前目錄,也可以換成其他檔名 git c...

Chisel 學習筆記(四)

chisel chisel中的所有類都要繼承module 類中必須要定義io型別,用來表示該模組的輸入輸出埠 每乙個輸入輸出埠,需要說明是有符號數還是無符號數,以及資料位寬 class myoperatorstwo extends module class myoperators val lengt...

點滴積累 使用IIS Express

iis express是乙個微軟推出的一款免費,且小型 輕量特別適合asp.net開發人員使用的web開發伺服器。在沒有iis express之前,開發人員只能使用下面兩種方案 既然已經有了這兩個選擇,為什麼還要推出iis express呢?這是由於這兩個方案的不足決定的,如下 但是iis expr...