freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

語法要點(diǎn)詳細(xì)講解-文庫吧

2025-07-29 04:22 本頁面


【正文】 存儲在另外的一個獨(dú)立的文件中 語法詳細(xì)講解 簡單 ROM建模 上頁所示的 ROM模型說明: ?如何在 Verilog中用二維的寄存器組來定義存儲器。 ?ROM中的數(shù)據(jù)保存在一個獨(dú)立的文件中,如上頁的右邊的虛線方框所示。 ?這是一種保存 ROM數(shù)據(jù)的通用的方法,它可以使數(shù)據(jù)和 ROM模型分開。 語法詳細(xì)講解 簡單 RAM建模 `timescale 1ns/1ns module mymem(data,addr,read,write)。 inout [3:0] data。 inout [3:0] addr。 input read, write。 reg [3:0] memory [0:15]。 //4 bits, 16 個單元 //從存儲器讀出到總線上 assign data=read? memory[addr]:4’bz。 //從總線寫入存儲器 always @ (posedge write) memory[addr]=data。 endmodule 語法詳細(xì)講解 簡單 RAM建模 RAM模型比 ROM模型稍微復(fù)雜: ? 它必須具有讀寫能力; ? 進(jìn)行讀寫時通常使用相同的數(shù)據(jù)總線; ? 需要新技術(shù)來處理雙向總線; ? 當(dāng)讀信號無效時, RAM模型與總線脫離,如果此時寫 信號也無效,總線無驅(qū)動源,則總線進(jìn)入高阻狀態(tài), 這就避免了 RAM中的讀寫競爭。 ? 上頁的 RAM 模塊是可綜合的,但綜合出來是一大堆寄存器,占比較大的面積,經(jīng)濟(jì)上不太合算。 例: module scalable_ROM (mem_word, address)。 parameter addr_bits=8。 //size of address bus parameter wordsize=8。 //width of a word parameter words=(1addr_bits)。 //size of mem output [wordsize:1] mem_word。 //word of memory input [addr_bits:1] address。 //address bus reg [wordsize:1] mem [0 : words1]。 //mem declaration //output one word of memory wire [wordsize:1] mem_word=mem[address]。 endmodule 語法詳細(xì)講解 存儲量可變的只讀存儲器建模 語法詳細(xì)講解 存儲量可變的只讀存儲器建模 上述的例子演示了怎樣通過設(shè)置字長和地址位數(shù)來編 寫 只讀存儲器的行為模塊。 [注意 ] !! 在上例中,存儲字的范圍從 0開始的,而不是從 1開始,這是因?yàn)榇鎯卧侵苯油ㄟ^地址線尋址定位的。 同樣地,也可以用下面的方法來定義存儲器和尋址: reg [wordsize:1] mem [1:words]。 //存儲器地址 從 1 開始 //地址一個一個地增加直到包含了每個地址對應(yīng)的存儲器 wire [wordsize:1] mem_word = mem[address+1]。 可以在初始化塊中用一個循環(huán)或系統(tǒng)任務(wù)把初始數(shù)據(jù)存入存儲器的每個單元。 ? 使用循環(huán)把值賦給存儲器數(shù)組。 for(i=0。imemsize。i=i+i) // initialize memory mema[i]={wordsize{1?b1}}。 ? 調(diào)用 $readmem系統(tǒng)任務(wù)。 //從文件 中 , 把初始數(shù)據(jù)存入存儲器 (mem)的每個單元 $readmemb(“”,mem)。 注意:上面兩項(xiàng)必須寫 在 initial 塊中,加載這些初始化數(shù)據(jù)不需要時間。 語法詳細(xì)講解 存儲器的加載 語法詳細(xì)講解 怎樣使用雙向口 使用 inout關(guān)鍵字聲明端口為雙向口 。 inout [7:0] databus。 使用雙向口必需遵循下面的規(guī)則: ? inout口只能聲明為網(wǎng)絡(luò)連接類型 , 不允許把它聲明為寄存器類型 。 ( 所以仿真器能確定多個驅(qū)動源的最終值 。 ) ? 在設(shè)計(jì)中 , 每次只能從一個方向來驅(qū)動 inout口 。 例如:當(dāng)使用總線讀 RAM中的數(shù)據(jù)時 , 如果同時又向 RAM模型的雙向數(shù)據(jù)總線寫數(shù)據(jù) , 就會產(chǎn)生邏輯競爭 , 導(dǎo)致總線數(shù)據(jù)無法確定 。 所以必須為 inout口設(shè)計(jì)控制邏輯 , 只有這樣才能保證正確的操作 。 語法詳細(xì)講解 怎樣使用雙向口 [注意 ]: ? 聲明一個 inout口,可以用來輸入或輸出數(shù)據(jù)。 inout口默認(rèn)為網(wǎng)絡(luò)連接類型。不允許在過程塊( initial 或always塊)中對網(wǎng)絡(luò)連接類型的數(shù)據(jù)進(jìn)行過程賦值;但可以在過程塊外把一個寄存器數(shù)據(jù)類型通過連續(xù)賦值語句賦給它( inout口),或者把它與用戶定義的源語( UDP)相連。 ? 必須為 inout口設(shè)計(jì)控制邏輯,用來保證正確的操作。當(dāng)把 inout口作為輸入口時,必須通過控制邏輯禁止輸出到 inout口。 使用 Verilog中的基本元件( bufif1)為雙向口建模: 語法詳細(xì)講解 雙向口建模 b2 b1 en_a_b en_b_a bus_a bus_b 語法詳細(xì)講解 雙向口建模 [注意 ]: 在上頁的例子中,使用 en_a_b和 en_b_a 來控制元器件 bufifl,如果控制信號同時有效,則結(jié)果無法確定。 所以必須把控制信號 en_a_b 和 en_b_a 在時間上分開。 module bus_xcvr(bus_a,bus_b,en_a_b,en_b_a)。 inout bus_a,bus_b。 input en_a_b,en_b_a。 bufifl b1(bus_b,bus_a,en_a_b)。 bufifl b2(bus_a,bus_b,en_b_a)。 //結(jié)構(gòu)模塊邏輯 endmodule 當(dāng) en_a_b=1時,元器件b1激活, bus_a的值傳到 bus_b上 當(dāng) en_b_a=1時,元器件 b1激活, bus_b的值傳到bus_a上 使用連續(xù)賦值為雙向口建模: 語法詳細(xì)講解 雙向口建模 b2 b1 en_a_b en_b_a bus_a bus_b [注意 ]:在 assign語句中 , 通過 en_a_b和 en_b_a控制 bus_a與bus_b之間的數(shù)據(jù)交換 。 如果控制信號同時有效 , 則結(jié)果不能確定 。 所以必須把控制信號 en_a_b 和 en_b_a 在時間上分開 。 語法詳細(xì)講解 雙向口建模 module bus_xcvr (bus_a,bus_b,en_a_b,en_b_a)。 inout bus_a,bus_b。 input en_a_b,en_b_a。 assign bus_b = en_a_b? bus_a:?bz。 assign bus_a = en_b_a? bus_b:?bz。 //結(jié)構(gòu)模塊邏輯 endmodule 當(dāng) en_a_b = 1時, bus_a的值傳到 bus_b上 當(dāng) en_b_a = 1時, bus_b的值傳到 bus_a上 存儲器的端口建模: 語法詳細(xì)講解 雙向口建模 module ram_cell(databus,)。 inout databus。 input rd,wr。 reg datareg。 assign databus = rd ? datareg:?bz。 always @(negedge wr) datareg=databus。 endmodule 當(dāng) rd等于 1時 datareg的值被賦給 databus 當(dāng) wr的下降沿到達(dá)時,databus的值被寫入datareg 測試模塊 RAM單元 數(shù)據(jù)總線 數(shù)據(jù) 寄存 器 rd wr [注意 ]: 上頁中存儲單元在 wr的下降沿到達(dá)時存入數(shù)據(jù)。 上頁模塊在 wr處于高電平時 , 通過數(shù)據(jù)總線寫入數(shù)據(jù) , 但必須保證 wr的高電平維持時間長于數(shù)據(jù)的寫入時間 。 在 rd處于高電平時 , 上述存儲單元通過數(shù)據(jù)總線讀出數(shù)據(jù) 。 由于此模型為單口存儲模型 , 因此 wr變低電平時 , rd不能同時為高電平 , 否則就無法確定存儲器的讀出 /寫入的結(jié)果 。 語法詳細(xì)講解 雙向口建模 目標(biāo) : ? 學(xué)會怎樣定義或調(diào)用任務(wù)和函數(shù) 。 ? 學(xué)會怎樣使用命名塊 。 ? 學(xué)會怎樣禁止命名塊和任務(wù) 。 ? 理解有限狀態(tài)機(jī)的作用 , 學(xué)會如何顯式地為有限狀態(tài)機(jī)建模 。 語法詳細(xì)講解 Verilog中的高級結(jié)構(gòu) 通過把代碼分成小的模塊或者使用任務(wù)和函數(shù) , 可把一項(xiàng)任務(wù)分成許多較小的 、 易于管理的部分 , 從而提高代碼的可讀性 、 可維護(hù)性和可重用性 。 ?任務(wù) : 一般用于編寫測試模塊或者行為描述的模塊。 其中可以包含時間控制 ( 如: delays, @, wait);也可以包含 input, output 、 inout 端口定義和參數(shù);也可以調(diào)用其他的任務(wù)或函數(shù) 語法詳細(xì)講解 Verilog中的高級結(jié)構(gòu) ? 函數(shù) : 1) 一般用于計(jì)算 , 或者用來代替組合邏輯 。 2) 不能包含任何延遲;函數(shù)在零時間執(zhí)行 。 3) 函數(shù)只有 input變量 , 雖然沒有 output變量 , 4) 但可以通過函數(shù)名返回一個值 。 5) 可以調(diào)用其他的函數(shù) , 但不可以調(diào)用任務(wù) 語法詳細(xì)講解 Verilog中的高級結(jié)構(gòu) [注意 ]: ? 只能調(diào)用本模塊內(nèi)的任務(wù)和函數(shù)。 ? 在任務(wù)和函數(shù)中不能聲明網(wǎng)絡(luò)連接類型的變量。 ? 所有的輸入和輸出變量實(shí)際上都是本地寄存器 。 ? 只有當(dāng)任務(wù)或函數(shù)調(diào)用并執(zhí)行完后,才能有返回值。 [舉例說明 ]: 若任務(wù)或函數(shù)中包含一個 forever循環(huán)時,永遠(yuǎn)無法執(zhí)行完,就不可能有返回值。 語法詳細(xì)講解 Verilog中的高級結(jié)構(gòu) 語法詳細(xì)講解 Verilog 任務(wù) 下面模塊中的任務(wù)含有定時控制和一個輸入,并且引用了一個本模塊的變量,但是沒有輸出,也沒有雙向總線和內(nèi)部變量,不顯示任何內(nèi)容。 用于定時控制的信號,例如 clk,絕對不能作為任務(wù)的輸入,這是因?yàn)檩斎胫抵幌蛉蝿?wù)內(nèi)部傳遞一次。 module top。 reg clk, a, b。 DUT u1(out, a, b, clk)。 always 5 clk=!clk。 語法詳細(xì)講解 Verilog 任務(wù) task neg_clocks。 input [31:0] number_of_edges。 repeat(number_of_edges) @(negedge clk)。 endtask initial begin clk=0。 a=1。 b=1。 neg_clocks(3)。 //任務(wù)調(diào)用 a=0。 neg_clocks(5)。 b=0。 end endmodule 要點(diǎn): ? 任務(wù)調(diào)用是通過在 Verilog模塊中寫入任務(wù)名來實(shí)現(xiàn)的 。 ? 任務(wù)中可以包含 input, output和 inout端口變量的聲明 。
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1