chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Verilog inout雙向口使用和仿真的方法

FPGA之家 ? 來(lái)源:FPGA之家 ? 2023-06-25 09:10 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

芯片外部引腳很多都使用inout類型的,為的是節(jié)省管腿。一般信號(hào)線用做總線等雙向數(shù)據(jù)傳輸?shù)臅r(shí)候就要用到INOUT類型了。就是一個(gè)端口同時(shí)做輸入和輸出。

inout在具體實(shí)現(xiàn)上一般用三態(tài)門來(lái)實(shí)現(xiàn)。三態(tài)門的第三個(gè)狀態(tài)就是高阻'Z'。當(dāng)inout端口不輸出時(shí),將三態(tài)門置高阻。

這樣信號(hào)就不會(huì)因?yàn)閮啥送瑫r(shí)輸出而出錯(cuò)了

1 使用inout類型數(shù)據(jù),可以用如下寫法:

inout data_inout;
input data_in;
reg data_reg;//data_inout的映象寄存器
reg link_data;
assign data_inout=link_data?data_reg:1’bz;//link_data控制三態(tài)門
//對(duì)于data_reg,可以通過(guò)組合邏輯或者時(shí)序邏輯根據(jù)data_in對(duì)其賦值.通過(guò)控制link_data的高低電平,從而設(shè)置data_inout是輸出數(shù)據(jù)還是處于高阻態(tài),如果處于高阻態(tài),則此時(shí)當(dāng)作輸入端口使用.link_data可以通過(guò)相關(guān)電路來(lái)控制.

2 編寫測(cè)試模塊時(shí),對(duì)于inout類型的端口,需要定義成wire類型變量,而其它輸入端口都定義成reg類型,這兩者是有區(qū)別的.

當(dāng)上面例子中的data_inout用作輸入時(shí),需要賦值給data_inout,其余情況可以斷開(kāi).此時(shí)可以用assign語(yǔ)句實(shí)現(xiàn):assign data_inout=link?data_in_t:1’bz;其中的link ,data_in_t是reg類型變量,在測(cè)試模塊中賦值.
另外,可以設(shè)置一個(gè)輸出端口觀察data_inout用作輸出的情況:
Wire data_out_t;
Assign data_out_t=(!link)?data_inout:1’bz;

3 else,in RTL
inout use in top module(PAD)
dont use inout(tri) in sub module
也就是說(shuō),在內(nèi)部模塊最好不要出現(xiàn)inout,如果確實(shí)需要,那么用兩個(gè)port實(shí)現(xiàn),到頂層的時(shí)候再用三態(tài)實(shí)現(xiàn)。理由是:在非頂層模塊用雙向口的話,該雙向口必然有它的上層跟它相連。既然是雙向口,則上層至少有一個(gè)輸入口和一個(gè)輸出口聯(lián)到該雙向口上,則發(fā)生兩個(gè)內(nèi)部輸出單元連接到一起的情況出現(xiàn),這樣在綜合時(shí)往往會(huì)出錯(cuò)。

對(duì)雙向口,我們可以將其理解為2個(gè)分量:一個(gè)輸入分量,一個(gè)輸出分量。另外還需要一個(gè)控制信號(hào)控制輸出分量何時(shí)輸出。此時(shí),我們就可以很容易地對(duì)雙向端口建模。

例子:
CODE:
module dual_port (
....
inout_pin,
....
);

inout inout_pin;

wire inout_pin;

wire input_of_inout;
wire output_of_inout;
wire out_en;

assign input_of_inout = inout_pin;

assign inout_pin = out_en ? output_of_inout : 高阻;//問(wèn)題,如果out_en為假的話,inout_pin為高

//阻,那input_of_inout呢?

//如果out_en為真,那么input_of_inout豈不

//是也等于inout_pin?怎么體現(xiàn)是輸入呢?

endmodule

可見(jiàn),此時(shí)input_of_inout和output_of_inout就可以當(dāng)作普通信號(hào)使用了。

4.仿真(o(∩_∩)o...哈哈,這才是我想要看的)

在仿真的時(shí)候,需要注意雙向口的處理。如果是直接與另外一個(gè)模塊的雙向口連接,那么只要保證一個(gè)模塊在輸出的時(shí)候,另外一個(gè)模塊沒(méi)有輸出(處于高阻態(tài))就可以了。
如果是在ModelSim中作為單獨(dú)的模塊仿真,那么在模塊輸出的時(shí)候,不能使用force命令將其設(shè)為高阻態(tài),而是使用release命令將總線釋放掉

很多初學(xué)者在寫testbench進(jìn)行仿真和驗(yàn)證的時(shí)候,被inout雙向口難住了。仿真器老是提示錯(cuò)誤不能進(jìn)行。下面是我個(gè)人對(duì)inout端口寫testbench仿真的一些總結(jié),并舉例進(jìn)行說(shuō)明。在這里先要說(shuō)明一下inout口在testbench中要定義為wire型變量。

先假設(shè)有一源代碼為:

module xx(data_inout , ........);

inout data_inout;

........................

assign data_inout=(! link)?datareg:1'bz;

endmodule

方法一:使用相反控制信號(hào)inout口,等于兩個(gè)模塊之間用inout雙向口互連。這種方法要注意assign 語(yǔ)句只能放在initial和always塊內(nèi)。

module test();

wire data_inout;

reg data_reg;

reg link;

initial begin

..........

end

assign data_inout=link?data_reg:1'bz;

endmodule

方法二:使用force和release語(yǔ)句,但這種方法不能準(zhǔn)確反映雙向端口的信號(hào)變化,但這種方法可以反在塊內(nèi)。

module test();

wire data_inout;

reg data_reg;

reg link;

#xx; //延時(shí)

force data_inout=1'bx; //強(qiáng)制作為輸入端口

...............

#xx;

release data_inout; //釋放輸入端口

endmodule

仿真

很多讀者反映仿真雙向端口的時(shí)候遇到困難,這里介紹一下雙向端口的仿真方法。一個(gè)典型的雙向端口如圖1所示。
其中inner_port與芯片內(nèi)部其他邏輯相連,outer_port為芯片外部管腳,out_en用于控制雙向端口的方向,out_en為1時(shí),端口為輸出方向,out_en為0時(shí),端口為輸入方向。
Verilog語(yǔ)言描述如下:
module bidirection_io(inner_port,out_en,outer_port);
input out_en;
inout[7:0] inner_port;
inout[7:0] outer_port;
assign outer_port=(out_en==1)?inner_port:8'hzz;
assign inner_port=(out_en==0)?outer_port:8'hzz;
endmodule
用VHDL語(yǔ)言描述雙向端口如下:
library ieee;
use IEEE.STD_LOGIC_1164.ALL;
entity bidirection_io is
port ( inner_port : inout std_logic_vector(7 downto 0);
out_en : in std_logic;
outer_port : inout std_logic_vector(7 downto 0) );
end bidirection_io;
architecture behavioral of bidirection_io is
begin
outer_port<=inner_port when out_en='1' else (OTHERS=>'Z');
inner_port<=outer_port when out_en='0' else (OTHERS=>'Z');
end behavioral;
仿真時(shí)需要驗(yàn)證雙向端口能正確輸出數(shù)據(jù),以及正確讀入數(shù)據(jù),因此需要驅(qū)動(dòng)out_en端口,當(dāng)out_en端口為1時(shí),testbench驅(qū)動(dòng)inner_port端口,然后檢查outer_port端口輸出的數(shù)據(jù)是否正確;當(dāng)out_en端口為0時(shí),testbench驅(qū)動(dòng)outer_port端口,然后檢查inner_port端口讀入的數(shù)據(jù)是否正確。由于inner_port和outer_port端口都是雙向端口(在VHDL和Verilog語(yǔ)言中都用inout定義),因此驅(qū)動(dòng)方法與單向端口有所不同。
驗(yàn)證該雙向端口的testbench結(jié)構(gòu)如圖2所示。
這是一個(gè)self-checking testbench,可以自動(dòng)檢查仿真結(jié)果是否正確,并在Modelsim控制臺(tái)上打印出提示信息。圖中Monitor完成信號(hào)采樣、結(jié)果自動(dòng)比較的功能。
testbench的工作過(guò)程為
1)out_en=1時(shí),雙向端口處于輸出狀態(tài),testbench給inner_port_tb_reg信號(hào)賦值,然后讀取outer_port_tb_wire的值,如果兩者一致,雙向端口工作正常。
2)out_en=0時(shí),雙向端口處于輸如狀態(tài),testbench給outer_port_tb_reg信號(hào)賦值,然后讀取inner_port_tb_wire的值,如果兩者一致,雙向端口工作正常。
用Verilog代碼編寫的testbench如下,其中使用了自動(dòng)結(jié)果比較,隨機(jī)化激勵(lì)產(chǎn)生等技術(shù)。
`timescale 1ns/10ps
module tb();
reg[7:0] inner_port_tb_reg;
wire[7:0] inner_port_tb_wire;
reg[7:0] outer_port_tb_reg;
wire[7:0] outer_port_tb_wire;
reg out_en_tb;
integer i;
initial
begin
out_en_tb=0;
inner_port_tb_reg=0;
outer_port_tb_reg=0;
i=0;
repeat(20)
begin
#50
i=random;outentb=i[0];//randomizeoutentbinnerporttbreg=random;outentb=i[0];//randomizeoutentbinnerporttbreg=random; //randomize data
outer_port_tb_reg=random;endend//****drivetheportsconnectingtobidirction_ioassigninner_port_tb_wire=(out_en_tb==1)?inner_port_tb_reg:8'hzz;assignouter_port_tb_wire=(out_en_tb==0)?outer_port_tb_reg:8'hzz;//最不懂的就是這兒了,估計(jì)也是最重要的地兒//instatiatethebidirction_iomodulebidirection_iobidirection_io_inst(.inner_port(inner_port_tb_wire),.out_en(out_en_tb),.outer_port(outer_port_tb_wire));//*****monitor******always@(out_en_tb,inner_port_tb_wire,outer_port_tb_wire)begin#1;if(outer_port_tb_wire===inner_port_tb_wire)beginrandom;endend//****drivetheportsconnectingtobidirction_ioassigninner_port_tb_wire=(out_en_tb==1)?inner_port_tb_reg:8'hzz;assignouter_port_tb_wire=(out_en_tb==0)?outer_port_tb_reg:8'hzz;//最不懂的就是這兒了,估計(jì)也是最重要的地兒//instatiatethebidirction_iomodulebidirection_iobidirection_io_inst(.inner_port(inner_port_tb_wire),.out_en(out_en_tb),.outer_port(outer_port_tb_wire));//*****monitor******always@(out_en_tb,inner_port_tb_wire,outer_port_tb_wire)begin#1;if(outer_port_tb_wire===inner_port_tb_wire)begindisplay(" **** time=%t ****",time);time);display("OK! out_en=%d",out_en_tb);
display("OK!outerporttbwire=display("OK!outerporttbwire=display(" **** time=%t ****",time);time);display("ERROR! out_en=%d",out_en_tb);
display("ERROR!outerporttbwire!=innerporttbwire");display("ERROR!outerporttbwire!=innerporttbwire");display("ERROR! outer_port_tb_wire=%d, inner_port_tb_wire=%d",
outer_port_tb_wire,inner_port_tb_wire);
end
end
endmodule





審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • VHDL語(yǔ)言
    +關(guān)注

    關(guān)注

    1

    文章

    113

    瀏覽量

    18670
  • RTL
    RTL
    +關(guān)注

    關(guān)注

    1

    文章

    389

    瀏覽量

    61036
  • MODELSIM仿真
    +關(guān)注

    關(guān)注

    0

    文章

    15

    瀏覽量

    7512
  • Verilog語(yǔ)言
    +關(guān)注

    關(guān)注

    0

    文章

    113

    瀏覽量

    8545

原文標(biāo)題:Verilog inout 雙向口使用和仿真

文章出處:【微信號(hào):zhuyandz,微信公眾號(hào):FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    Verilog inout 雙向使用和仿真

    input_of_inout和output_of_inout就可以當(dāng)作普通信號(hào)使用了。4.仿真(o(∩_∩)o...哈哈,這才是我想要看的)在仿真的時(shí)候,需要注意
    發(fā)表于 01-17 10:08

    Verilog inout 雙向使用和仿真-轉(zhuǎn)載

    input_of_inout和output_of_inout就可以當(dāng)作普通信號(hào)使用了。4.仿真(o(∩_∩)o...哈哈,這才是我想要看的)在仿真的時(shí)候,需要注意
    發(fā)表于 02-01 11:16

    VHDL中雙向inout端口的實(shí)現(xiàn)

    設(shè)計(jì)的基礎(chǔ).在程序設(shè)計(jì)過(guò)程中,關(guān)鍵技術(shù)在于:實(shí)體部分必須對(duì)端口屬性進(jìn)行申明,端口屬性必須為inout類型,在構(gòu)造體需要對(duì)輸出信號(hào)進(jìn)行有條件的高阻控制.在雙向電路的處理問(wèn)題上,常用的處理方式有兩種,在介紹雙向
    發(fā)表于 04-01 18:18

    inout testbench寫法總結(jié)

    ; endmodule 可見(jiàn),此時(shí)input_of_inout和output_of_inout就可以當(dāng)作普通信號(hào)使用了。 在仿真的時(shí)候,需要注意雙向
    發(fā)表于 08-09 08:21

    inout 怎么仿真

    最近寫的 程序都涉及到inout 變量,想在modelsim中仿真,但是testbench不會(huì)寫, 老寫錯(cuò),求助下
    發(fā)表于 03-23 10:21

    verilog inout的 用法

    )?data_inout:1'bz;總結(jié):主要是安好verilog語(yǔ)言要求的用,一般情況下,不會(huì)出錯(cuò),仿真的時(shí)候需要注意下就是了
    發(fā)表于 01-24 12:27

    請(qǐng)問(wèn)雙向仿真,雙向用作輸入口, 輸出口該怎么設(shè)置?

    關(guān)于雙向仿真, 如果雙向用作輸入口, 輸出口該怎么設(shè)置?
    發(fā)表于 09-19 05:55

    verilog每日一練】“inout雙向端口類型的使用

    verilog除了input和output的端口類型,還有inout雙向端口,比如在IIC協(xié)議中sda為雙向信號(hào)。若sda在sda_out_en為1時(shí)輸出sda_out的數(shù)值,在sda
    發(fā)表于 08-03 16:24

    Inout雙向端口信號(hào)處理方法

    Inout端口信號(hào)做輸入時(shí),觀察例子中的輸出Data_out_t就應(yīng)該是高阻態(tài)的,Inout在具體實(shí)現(xiàn)上一般用三態(tài)門來(lái)實(shí)現(xiàn)。三態(tài)門的第三個(gè)狀態(tài)就是高阻''Z''。當(dāng)Inout端口不輸出時(shí),將三態(tài)門置高阻
    發(fā)表于 11-11 10:24 ?4011次閱讀

    簡(jiǎn)談FPGA/Veriloginout端口使用方法

    ????????大家好,又到了每日學(xué)習(xí)的時(shí)間了,今天我們來(lái)聊一聊FPGA/Veriloginout端口使用方法。 ? ? ? ?輸入端口可以由wire/reg驅(qū)動(dòng),但輸入端口只能是wire;輸出
    的頭像 發(fā)表于 08-13 13:45 ?1.7w次閱讀

    Verilog系統(tǒng)函數(shù)和邊沿檢測(cè)

    “ 本文主要分享了在Verilog設(shè)計(jì)過(guò)程中一些經(jīng)驗(yàn)與知識(shí)點(diǎn),主要包括Verilog仿真時(shí)常用的系統(tǒng)任務(wù)、雙向端口的使用(inout)、邊沿
    的頭像 發(fā)表于 03-15 13:34 ?2720次閱讀

    verilog inout用法與仿真

    ,本文將詳細(xì)討論 inout 的用法和仿真。 首先,我們來(lái)了解一下 inout 的含義。 inout 是一種雙向信號(hào)類型,即可以作為輸入信號(hào)
    的頭像 發(fā)表于 02-23 10:15 ?4167次閱讀

    inout類型怎么仿真

    InOut類型的仿真是指通過(guò)計(jì)算機(jī)軟件模擬和模擬硬件組件之間的輸入和輸出交互過(guò)程,以驗(yàn)證和評(píng)估電子電路設(shè)計(jì)的正確性和性能。下面將詳細(xì)介紹InOut類型的仿真及其實(shí)現(xiàn)
    的頭像 發(fā)表于 02-23 10:17 ?1454次閱讀

    verilog雙向端口的使用

    Verilog硬件描述語(yǔ)言中,端口是指連接模塊(Module)與其他模塊、寄存器或是物理設(shè)備的輸入或輸出接口。單向端口可以作為輸入或輸出使用,而雙向端口具有雙重作用,既可以接收輸入信號(hào),又可以輸出
    的頭像 發(fā)表于 02-23 10:18 ?2061次閱讀

    Verilog 測(cè)試平臺(tái)設(shè)計(jì)方法 Verilog FPGA開(kāi)發(fā)指南

    指南: Verilog測(cè)試平臺(tái)設(shè)計(jì)方法 選擇仿真工具 : 選擇一款強(qiáng)大的仿真工具,如ModelSim、Xilinx ISE等。這些工具提供了豐富的功能,包括波形查看、調(diào)試功能、時(shí)序分析
    的頭像 發(fā)表于 12-17 09:50 ?1124次閱讀