systemVerilogは合成出来る部分もかなりな物です。。
→netから拾ってきたuart16550をmyバスへつなげようと中身を見たらゲロが出そうなコード。。。
仕様書だけもらって作り直した。uart16550程度ならチョロチョロと自分で書いた方が速いと
思えるだけの記述力があると思う。
仕様書だけもらって作り直した。uart16550程度ならチョロチョロと自分で書いた方が速いと
思えるだけの記述力があると思う。
* structをportへ引き出してみる。
ユーザ定義のデータ型うれしい点はデータ整理が出来るだけではない。
処理も一括で出来る所にある。
下記の例は struct timerを一括してclkサンプリングしている。
処理も一括で出来る所にある。
下記の例は struct timerを一括してclkサンプリングしている。
typedef struct packed{ logic [31:0] count ; state_t state ; logic [31:0] c_value ; logic intr ; control_t cont_reg ; } timer_t ; // ------ timer_t timer,timer_l ; always_ff @(posedge clk) timer_l <= #1 timer ;
合成もできるよ。
注)modelSimではstruct packedでないとエラーになる。→packedは入れ子が可能なので実害は無いな。
Quartus2-9.1sp1ではpackedでなくても合成可能。。
→シミュレータが合成器に負けてるじゃん。。明太子君しっかりしたまえ~~structはportにも出せる合成も可能。。下記に例が。。
→interface文は合成できないんだな。。
→interface文は合成できないんだな。。
module timer_module ( input clk_i, input nrst_i, input [3:0] adr_i, input [31:0] dat_i, input cyc_i, input stb_i, input [3:0] sel_i, input we_i, output [31:0] dat_o, output ack_o, output intr_o, output timer_t tm_t0, // <--- output timer_t tm_t1 // <--- ) ;
合成後のpinout-fileを見ると
"."で区切られた信号名が付けられる。。(Quartus2-sp1)
"."で区切られた信号名が付けられる。。(Quartus2-sp1)
....... ....... dat_o[11] : A6 : output : 2.5 V tm_t0.c_value[6] : A7 : output : 2.5 V dat_i[16] : A8 : input : 2.5 V tm_t0.cont_reg.intr_clr : A9 : output : 2.5 V we_i : A10 : input : 2.5 V GND+ : A11 : : GND+ : A12 : : tm_t1.cont_reg.count_en : A13 : output : 2.5 V tm_t1.count[3] ........ ........ .......
systemVerilog Quartus2 modelSim