數位邏輯設計與實習 Ch07 Verilog語法.

Slides:



Advertisements
Similar presentations
第一單元 建立java 程式.
Advertisements

數位邏輯設計與實習 Ch02基本邏輯閘與布林代數.
第4章 VHDL设计初步.
Chapter 5 Sequential Logic Circuit
數位邏輯設計與實習 ch04 組合邏輯電路設計.
Chapter 4 流程控制.
陳維魁 博士 儒林圖書公司 第九章 資料抽象化 陳維魁 博士 儒林圖書公司.
第三章 组合逻辑电路 第一节 组合电路的分析和设计 第二节 组合逻辑电路中的竞争与冒险 第三节 超高速集成电路硬件描述语言VHDL
題目:十六對一多工器 姓名:李國豪 學號:B
數位邏輯設計與實習 Ch05序向邏輯電路.
正反器 一、循序邏輯電路 二、動作情形:用時序(timing),其次輸出( )是由外界輸入與( )所共同決定。
Visual C++ introduction
Chapter 5 Verilog 硬體描述語言
Chapter 5 Verilog硬體描述語言
Chapter 5 Verilog 硬體描述語言
邏輯設計 老師:羅峻旗 助教:楊斯竣.
邏輯設計.
2-3 基本數位邏輯處理※.
Ch01-2 Verilog語法 資料流(DataFlow)設計 行為(Behavior)設計
第17章 Verilog中的高级结构 学习内容: 任务和函数的定义和调用 怎样使用命名块 怎样禁止命名块和任务 有限状态机(FSM)及建模.
EDA技术 廖义奎.
授課教授 : 陳永耀 博士 學生 : 藍浩濤 P 電機所控制組
第四阶段实验 ISP器件的设计与应用 一、实验目的 二、实验内容与要求 三、ISP器件的开发流程 四、EDA Pro2K实验系统介绍
欢迎参加VHDL培训 VHDL培训教程 浙江大学电子信息技术研究所 电子设计自动化(EDA)培训中心
義守大學電機工程學系 陳慶瀚 第2章 VHDL基本語法 義守大學電機工程學系 陳慶瀚
數位邏輯設計與實習 Ch06 計數器與暫存器設計.
類別(class) 類別class與物件object.
SQL Stored Procedure SQL 預存程序.
Verilog硬件描述语言基础.
第14章 其它DSP设计库 14.1 总线控制库 14.2 复数信号库 14.3 Gates库 14.4 状态机函数库
AIM-spice Miao-shan, Li.
Programmable Logic Architecture Verilog HDL FPGA Design
第 8 章 Combinational Logic Applications
语法进阶.
时序电路设计 刘鹏 浙江大学信息与电子工程系 Apr. 24, 2011 EE141
數位邏輯與實習 Week 4 曾建勳.
数字集成电路设计入门 --从HDL到版图 于敦山 北大微电子学系.
精简指令集(RISC)CPU的构造原理和设计方法
義守大學電機工程學系 陳慶瀚 第3章 VHDL Concurrent語法 義守大學電機工程學系 陳慶瀚
第一單元 建立java 程式.
第五章 VHDL主要描述语句.
實驗十二: 紅綠燈控制電路設計 規格: Due: Jan. 3, 2008 Tvrl = Thgl + Thgf + Thyl
第一次上机安排 第六周 第七周 周一晚(提高1、2,通信001~012) 周二上(通信014~085) 周四上(通信086~154)
數位邏輯與實習 Week 8-12 邏輯閘層次的最小化 曾建勳.
第七單元 正反器 (教科書第四章) 數位系統實驗
JAVA 程式設計 資訊管理系 - 網路組.
輸入&輸出 函數 P20~P21.
第14章 对验证的支持 学习内容 理解Verilog文本输出 理解不同的读取仿真时间的系统函数 理解 Verilog文件I/O功能.
计算机学院 数字逻辑实验的要求.
使用VHDL設計 七段顯示器 通訊工程系 一年甲班 姓名 : 蘇建宇 學號 : B
计算机EDA设计 教 程 北航计算机学院 艾明晶.
挑戰C++程式語言 ──第8章 進一步談字元與字串
或閘的特性與符號 所有的輸入均為0,輸出才為0 ▲ 圖 3-1 或閘的邏輯概念 ▲ 圖 3-2 或閘的電路符號.
设计示例一 用门级结构描述D触发器:.
數位邏輯設計 VHDL.
邏輯設計實驗作業 ----基本邏輯閘實驗 學號:B 楊穎穆.
數位邏輯設計與實習 Ch08實驗室實習.
流程控制:Switch-Case 94學年度第一學期‧資訊教育 東海大學物理系.
邏輯設計 老師:羅峻旗 助教:楊斯竣.
第九章 布林代數與邏輯設計.
一、簡介 電腦硬體設計:純硬體電路(hardware)及韌體電 路(firmware)兩種方式。
使用VHDL設計-8x3編碼電路 通訊一甲 B 楊穎穆.
資料表示方法 資料儲存單位.
FPGA组合逻辑 王安然.
Verilog HDL 基本语法 STEP 2016/12/3.
按键处理部分 王安然.
Programmable Logic System Design
Programming & Language Telling the computer what to do
使用VHDL設計-七段顯示 通訊一甲 B 楊穎穆.
InputStreamReader Console Scanner
Presentation transcript:

數位邏輯設計與實習 Ch07 Verilog語法

CAD –電腦輔助設計 數百萬個電晶體與邏輯閘 支援電路之電腦基本陳述的軟體程式 利用自動化設計程序輔助數位硬體電路的開發 設計入門 模擬 電路圖抓取 (schematic capture) 或電路圖繪製 (schematic entry) 硬體描述語言 (hardware description language, HDL) Verilog, VHDL 模擬 實體實現 ASIC, FPGA, PLD

硬體描述語言(HDL) 一種以計算機為基礎而用文字的形式來描述數位系統硬體電路的語言: VHDL 與 Verilog HDL 硬體結構 功能/行為 時序 VHDL 與 Verilog HDL

A Top-Down Design Flow

簡介 Verilog HDL 由 Gateway 公司所提出。 用來描述硬體設計,從硬體的概念出發。 語法與 C 語言類似,容易學習。 RTL( Register Transfer Language) Verilog HDL: IEEE Standard (IEEE 1364 - 1995 ~ IEEE 1364 - 2001)

識別字(Identifiers) 在 Verilog 電路描述中,識別字可用於定義變數名稱、函數名稱、模組名稱與物件實例 (instance) 名稱。 識別字的命名規則: 第一個字元必須是英文字母。 第二個之後的字元可以是英文字母、數字、底線 ( _ ) 或是錢字號 ($)。 識別字的長度沒有限制。 識別字有區分英文大小寫。

關鍵字(Keywords) 關鍵字是用來描述Verilog的電路架構。 Ex 所有的關鍵字必須使用英文小寫字母來表示。 常見的關鍵字有 input adder_in; //”input”是關鍵字, ”adder_in” 是識別字 wire adder_out; //”wire”是關鍵字,”adder_out”是識別字 所有的關鍵字必須使用英文小寫字母來表示。 常見的關鍵字有 always negedge posedge begin end assign wire integer function endfunction module endmodule for if else inout input output and buf nand nor not or xnor xor

註解(Comments) 單行註解 使用「//」作為開始符號。 結束符號為換行符號 (end_of_line)。 多行註解 使用「/*」作為開始符號。 使用「*/」作為結束符號。

接線(Nets) wire a; //宣告有一條接線叫做a wire [15:0] data_bus; // 宣告data_bus為16 bit的連接線

暫存器(registers) reg R; //宣告一個變數R為暫存器 reg [7:0] r0; //宣告一個寬度為8位元的r0暫存器 有記憶功能的線

數字(number) integer real time integer count; real avg; count = 0;

參數 parameter value1=9; parameter wordsize=16; reg [wordsize-1:0] data_bus; reg [15:0] data_bus; //同上

陣列與記憶體 <資料型態><長度><變數名><陣列大小> reg datareg[7:0]; integer [7:0] outint[15:0]; reg[7:0] mem256[255:0]; reg[15:0] mem_1024[1023:0];

三態 inout[3:0] dbus; module tribuf(dbus,enable,value1); input enable; input[3:0] value1; assign dbus =(enable==1) ? value1 : 4’bz; endmodule

數字表示規格 一樣的數值以不同的進制表示 8'b10100101; //binary 8位元的二進位表示 8'ha5; //hexadecimal 8位元的十六進位表示 8'd165; //decimal 8位元的十進位表示 8'o245; //octal 8位元的八進位表示

負數 -8’d3; //8bit以二補數法表示(-3) 4’d-2; //錯誤的寫法

數值 12’h13z; //一個z在十六進制代表四位元的高阻抗 12’h12x; //一個x在十六進制代表四位元的不確定值 8’b0011_1010; //加上”_”可以方便閱讀,並不會影響數值 //但第一位元不能加低線

運算元(Operators) 單元(Unary)運算子:放在運算元前面。 ex. assign a=~b; //"~",1位元反向。 二元(Binary)運算元:放在兩個運算元之間。 ex. assign a=b&c; //"&",1位元寬度的AND動作。 三元(Ternary)運算子:條件運算子 ex. assign out=select ? a : b; //當select為1(true)時,out=a; //當select為0(false)時,out=b;

運算子種類

運算子優先順序

模組結構

模組的基本架構 module test(A, B, C, D, E); output D, E; input A, B, C; wire w1; reg r; ............... .............. endmodule

模組的基本架構new module test(output D, E, input A,B,C); wire w1; reg r; ............... .............. endmodule 注意:分號有無

對映方式 by order by name module dff(din,clock,q) input din,clock; output q; reg q; always@(posedge clock) q = din; endmodule

2_1多工器 module mux2_1(ma,mb,s,mout) input ma,mb,s; output mout; assign mout = s? ma:mb; endmodule

正反器輸出選擇—by order module dff_sef(da,db,sel,clk,q) input da,db,sel,clk; output q; wire qa,qb; dff dff1(da,clk,qa); dff dff2(db,clk,qb); mux2_1 mux(qa,qb,sel,q) endmodule

正反器輸出選擇—by name module dff_sef(da,db,sel,clk,q) input da,db,sel,clk; output q; wire qa , qb; dff dff1(.din(da),.clock(clk),.q(qa)); dff dff2(.din(db),.clock(clk),.q(qb)); mux2_1 mux(qa,qb,sel,q) endmodule

模組範例1 module half_adder (output S, C, input x, y); xor (S, x, y); and (C, x, y); endmodule module full_adder (output S, C, input x, y, z); wire S1, C1, C2; half_adder HA1 (S1, C1, x, y); half_adder HA2 (S, C2, S1, z); or G1 (C, C2, C1); module ripple_carry_4_bit_adder ( output [3: 0] Sum, output C4, input [3:0] A, B, input C0); wire C1, C2, C3; full_adder FA0 (Sum[0], C1, A[0], B[0], C0) , FA1 (Sum[1], C2, A[1], B[1], C1) , FA2 (Sum[2], C3, A[2], B[2], C2) , FA3 (Sum[3], C4, A[3], B[3], C3) ;

模組範例2 module half_adder (output S, C, input x, y); xor (S, x, y); and (C, x, y); endmodule module full_adder (output S, C, input x, y, z); wire S1, C1, C2; half_adder HA1 (S1, C1, x, y); half_adder HA2 (S, C2, S1, z); or G1 (C, C2, C1); module ripple_carry_4_bit_adder ( output [3: 0] Sum, output C4, input [3:0] A, B, input C0); wire C1, C2, C3; full_adder FA0 (Sum[0], C1, A[0], B[0], C0) ; full_adder FA1 (Sum[1], C2, A[1], B[1], C1) ; full_adder FA2 (Sum[2], C3, A[2], B[2], C2) ; full_adder FA3 (Sum[3], C4, A[3], B[3], C3) ;

四種描述層次 Switch level 最低層次,設計者需知道電晶體的元件特性。 Gate level 模組是由Logic gates所構成的,使用原始閘以及使用者定義模組的實例(instantiation)。 Dataflow level 說明資料如何在暫存器中儲存和傳送,和資料處理的方式。使用具有關鍵字assign之連續指定敘述。 Behavioral level 只考慮模組中的功能和函數,不必考慮硬體方面的詳細電路,如同是在寫C語言一樣。使用具有關鍵字always之程序指定敘述。

Gate level and/nand/or/nor/xor/xnor buffer、not bufif1, bufif0, notif1, notif0

基本邏輯閘 1 and/nand/or/nor/xor/xnor nand g1(out,in1,in2,in3) ;//別名 and (out,in1,in2) ; //沒有別名 第一腳輸出,其餘當輸入

基本邏輯閘 2 buffer、not 閘的使用 bufif1, bufif0, notif1, notif0 buf b1(out, in) ; not n1(out, in) ; bufif1, bufif0, notif1, notif0 bufif1 (outb, inb, ctrlb) notif0 element0(outn, inn,ctrln)

三態閘 gate name (output, input, control); bufif1, bufif0, notif1, notif0 bufif1 (outb, inb, ctrlb) notif0 element0(outn, inn,ctrln)

簡單範例 module Simple_Circuit (A, B, C, D, E); output D, E; input A, B, C; wire w1; and G1 (w1, A, B); // instance name可有可無 not G2 (E, C); or G3 (D, w1, E); endmodule

練習

上機模擬練習7-1

閘延遲 timescale directive (編譯指引) ‘timescale 1 ns/100ps(時間單位/解析度) 例: ‘timescale 10ns/1ns nand #10 g1(f,x,y); 10*10=100ns 則此nand 閘傳播延遲100ns

閘延遲 module Simple_Circuit_prop_delay (A, B, C, D, E); output D, E; input A, B, C; wire w1; and #(30) G1 (w1, A, B); not #(10) G2 (E, C); or #(20) G3 (D, w1, E); endmodule

閘延遲範例 ‘timescale 1 ns/1ns module prog_ex(x, y, z, f); input x, y, z; output f; // internal declaration wire a, b, c; // internal net // logic circuit body and #5 a1 (b,x,y); //AND p_delay not #10 n1 (a,x); and #5 a2 (c,a,z); or #5 o2 (f,b,c); endmodule

上機模擬練習7-2

測試平台 `timescale 1 ns / 100 ps module t_Simple_Circuit_prop_delay; wire D, E; reg A, B, C; Simple_Circuit_prop_delay M1 (A, B, C, D, E); // Instance name required initial begin A = 1'bx; B = 1'bx; C = 1'bx; A = 1'b0; B = 1'b0; C = 1'b0; #100 A = 1'b1; B = 1'b1; C = 1'b1; #100 $finish; end initial $monitor($time,,"A = 5b B= %b C = %b w1 = %b D = %b E = %b", A, B, C, D, M1.w1, E); endmodule

2對4高態輸出解碼器 `timescale 1ns / 1ps module decoder2_4( input a, //a MSB input b, output [3:0] y ); wire an,bn; not(an,a); not(bn,b); and(y[0],an,bn); and(y[1],an,b); and(y[2],a,bn); and(y[3],a,b); endmodule

1 bit 比較器 `timescale 1ns / 1ps module comparator_1bit( input a, input b, output eq, output gt, output lt ); wire an,bn,a0b0,a1b1; not(an,a); not(bn,b); and(a1b1,a,b); nor(a0b0,a,b); //NOR gate or(eq,a0b0,a1b1); and(gt,a,bn); and(lt,an,b); endmodule

2 bit 比較器方塊圖

2 bit 比較器 `timescale 1ns / 1ps module comparator_2bit( input [1:0] a, input [1:0] b, output eq2, output gt2, output lt2 ); wire equal_1,large_1,small_1; wire equal_2,large_2,small_2; wire gla,lla; and( gla, large_1, equal_2 ); and( lla, small_1, equal_2 ); comparator_1bit element1(.eq(equal_1), .gt(large_1), .lt(small_1), .a(a[0]), .b(b[0])); comparator_1bit element2(.eq(equal_2), .gt(large_2), .lt(small_2), .a(a[1]), .b(b[1])); and( eq2, equal_1, equal_2 ); or( gt2, gla, large_2 ); or( lt2, lla, small_2 ); endmodule

上機模擬練習7-3 多模組編輯

上機模擬練習7-4 一程式有許多模組(不建議此方式)

上機模擬練習7-5 HDL+電路圖方式 利用HDL製作基本元件 主程式以繪圖方式達成系統功能

2對1多工器 `timescale 1ns / 1ps module mux_2_1_gate( input a, input b, input s, output y ); wire s0,sa,sb; not( s0, s ); and( sa, a, s0 ); and( sb, b, s ); or( y, sa, sb ); endmodule

4對1多工器-1 `timescale 1ns / 1ps module mux_4_1_gate( input [3:0] i, input [1:0] s, output f ); wire f0,f1; // by order mapping mux_2_1_gate element1( i[0], i[1], s[0], f0 ); mux_2_1_gate element2( i[2], i[3], s[0], f1 ); mux_2_1_gate element3( f0, f1, s[1], f ); endmodule

4對1多工器-2 改成 by name mapping mux_2_1_gate element1( i[0] , i[1], s[0], f0 ); mux_2_1_gate element1(.a(i[0] ),.b(i[1]),.s(s[0]),.y(f0));

4對1多工器-3 以bufif0,bufif1 module mux4_1b_g(y, s, i); output y; //output y input [1:0] s; input [3:0] i; wire y0, y1; // Instantiates buffers bufif0 (y0, i[0], s[0]); bufif1 (y0, i[1], s[0]); bufif0 (y1, i[2], s[0]); bufif1 (y1, i[3], s[0]); bufif0 (y, y0, s[1]); bufif1 (y, y1, s[1]); endmodule

具有enable2對4低態輸出解碼器

半加器設計

全加器設計

3 bit 多數表決電路設計

UDP範例(使用者定義的基本閘)

使用者定義的基本閘 使用關鍵字primitive作宣告,後面接著是名稱以及埠名單。 只可以有一個輸出,且此輸出必須列在埠名單的第一個,還有必須用關鍵字output來宣告。 輸入數目不限制,至於它們在input宣告中的順序則必須與它們在下面表中所給值的順序相同。 真值表必須在關鍵字table及endtable之間。 輸入值依順序列出,用冒號 (:) 代表結束。輸出通常是每一列的最後一個記錄,後面跟著是一個分號 (;)。 最後用關鍵字endprimitive做為UDP宣告的結束。

User-defined Primitive primitive my_UDP (D, A, B, C); output D; input A, B, C; // Truth table for D = f (A, B, C) = m(0, 2, 4, 6, 7); table // A B C : D // Column header comment 0 0 0 : 1; 0 0 1 : 0; 0 1 0 : 1; 0 1 1 : 0; 1 0 0 : 1; 1 0 1 : 0; 1 1 0 : 1; 1 1 1 : 1; endtable endprimitive

UDP範例程式 module Circuit_with_UDP(e, f, a, b, c, d); output e, f; input a, b, c, d; my_UDP M0 (e, a, b, c); and (f, e, d); //省略 gate instance name endmodule

上機模擬練習7-6

Gate Level Design練習 以Gate Level Design方式設計,4對1多工器,並附模擬圖 以Gate Level Design方式設計,利用2對1多工器,設計4對1多工器,用By name mapping,並附模擬圖 利用2對1多工器做成元件,以HDL及電路圖方式,設計4對1多工器,並附模擬圖 以Gate Level Design方式設計,具有enable2對4低態輸出解碼器,並附模擬圖 以Gate Level Design方式設計,半加器設計,並附模擬圖 以Gate Level Design方式設計,全加器設計,並附模擬圖 以Gate Level Design方式設計,3 bit 多數表決電路設計,並附模擬圖