日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人工智能 > 循环神经网络 >内容正文

循环神经网络

matlab verilog 接口,使用SystemVerilog简化FPGA中的接口

發(fā)布時間:2025/5/22 循环神经网络 136 豆豆
生活随笔 收集整理的這篇文章主要介紹了 matlab verilog 接口,使用SystemVerilog简化FPGA中的接口 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

FPGA工程師們應(yīng)該都會吐槽Verilog的語法,相當(dāng)?shù)牟挥押?#xff0c;尤其是對于有很多接口的模塊,像AXI4/AXI-Lite這種常用的總線接口,動不動就好幾十根線,寫起來是相當(dāng)費勁。

當(dāng)然現(xiàn)在Xilinx推薦使用純bd文件的方式來設(shè)計FPGA,這樣HDL代碼就會少了很多。但我們大多數(shù)的工程還是無法避免使用HDL來連接兩個module。所以本文就推薦使用SystemVerilog來簡化FPGA中接口的連接方式。

也許很多FPGA工程師對SystemVerilog并不是很了解,因為以前的FPGA開發(fā)工具是不支持SystemVerilog的,導(dǎo)致大家都是用VHDL或者Verilog來開發(fā),但現(xiàn)在Vivado對SystemVerilog的支持已經(jīng)比較好了,完全可以使用SystemVerilog寫出可綜合的FPGA程序,而且FPGA開發(fā)中只會使用的SystemVerilog語法的一小部分,入門也很快,因此建議FPGA工程師學(xué)一下SystemVerilog。

本文中用到的logic關(guān)鍵字的解釋可以參考SystemVerilog教程之?dāng)?shù)據(jù)類型1

此次例程也比較簡單,有兩個模塊module1和module2,module1中輸出a和b,在module2中完成加法后再返還給module1,最終輸出的led=c | a。

image-20200720203534072

首先用Verilog來實現(xiàn),代碼也比較簡單,就簡單解釋一句:文件格式都是.sv,這是因為SystemVerilog的語法都是包含Verilog的。

//top.sv

module?top(

input????????clk,

input????????rst,

output?[3:0]?led

);

logic????[3:0]?a?;

logic????[3:0]?b?;

logic????[3:0]?c?;

module1?inst_module1(

.clk??(clk??),

.rst??(rst??),

.a????(a),

.b????(b),

.c????(c),

.led??(led)

);

module2?inst_module2(

.clk??(clk??),

.rst??(rst??),

.a????(a),

.b????(b),

.c????(c)

);

endmodule

//?module1.sv

module?module1(

input?clk,

input?rst,

output?logic?[3:0]?a,

output?logic?[3:0]?b,

input??logic?[3:0]?c,

output?logic?[3:0]?led

);

assign?led?=?c?|?a;

always?@?(?posedge?clk?)?begin

if(rst)?begin

a?<=?4'd1;

b?<=?4'd2;

end

else?begin

a?<=?a?+?1'b1;

b?<=?b?+?1'b1;

end

end

endmodule

//?module2.sv

module?module2(

input?clk,

input?rst,

input??logic?[3:0]?a,

input??logic?[3:0]?b,

output?logic?[3:0]?c

);

always?@?(?posedge?clk?)?begin

if(rst)

c?<=?4'd1;

else

c?<=?a?+?b;

end

endmodule

綜合之后的Schematic如下圖所示:(為了更好的表示電路結(jié)構(gòu),我將flatten_hierarchy選為了none)

image-20200720192328527

下面我們把程序稍作改動,將a/b/c三個接口使用SystemVerilog中的interface來連接。

在工程中添加my_itf.sv文件如下:

//?my_itf.sv

interface?my_itf;

logic?[3:0]?a,?b,?c;

modport?mod1?(input?c,????output?a,?b);

modport?mod2?(input?a,?b,?output?c??);

endinterface?:?my_itf

關(guān)鍵字interface就表示要創(chuàng)建一個接口模塊,里面包含了3個接口:a/b/c。

modport定義了這三個接口的方向,對于module1來說,a和b是輸出,c是輸入;對于module2來說,a和b是輸入,c是輸出。

注:也可以不使用modport,Vivado會根據(jù)代碼自動推斷出接口的方向,但不建議這么做

修改module1.sv如下,其中a/b/c端口換成了my_itf.mod1 itf_abc,my_itf.mod1就表示my_itf接口的方向按照mod1中指定的,而且代碼中的a、b、c要相應(yīng)的換成itf_abc.a、itf_abc.b、itf_abc.c.

//?module1.sv

module?module1(

input?clk,

input?rst,

my_itf.mod1?itf_abc,

output?logic?[3:0]?led

);

assign?led?=?itf_abc.c?|?itf_abc.a;

always?@?(?posedge?clk?)?begin

if(rst)?begin

itf_abc.a?<=?4'd1;

itf_abc.b?<=?4'd2;

end

else?begin

itf_abc.a?<=?itf_abc.a?+?1'b1;

itf_abc.b?<=?itf_abc.b?+?1'b1;

end

end

endmodule

修改module2.sv代碼如下,原則跟上面是一樣的,不再贅述。

//?module2.sv

module?module2(

input?clk,

input?rst,

my_itf.mod2?itf_abc

);

always?@?(?posedge?clk?)?begin

if(rst)

itf_abc.c?<=?4'd1;

else

itf_abc.c?<=?itf_abc.a?+?itf_abc.b;

end

endmodule

修改top.sv如下,例化my_itf接口,將itf_abc.mod1傳給module1,將itf_abc.mod2傳給module2.

//?top.sv

module?top(

input????????clk,

input????????rst,

output?[3:0]?led

);

logic????[3:0]?a?;

logic????[3:0]?b?;

logic????[3:0]?c?;

my_itf?itf_abc();

module1?inst_module1(

.clk???????(clk??),

.rst???????(rst??),

.itf_abc???(itf_abc.mod1),

.led???????(led)

);

module2?inst_module2(

.clk???????(clk??),

.rst???????(rst??),

.itf_abc???(itf_abc.mod2)

);

endmodule

大功告成!!!

綜合后Schematic如下,跟上面的圖只是名字不同,電路是一樣的。

image-20200720201342972

總結(jié)

以上是生活随笔為你收集整理的matlab verilog 接口,使用SystemVerilog简化FPGA中的接口的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。