[HDL語言與ASIC原理][王金明verilog源碼]
《[HDL語言與ASIC原理][王金明verilog源碼]》由會員分享,可在線閱讀,更多相關《[HDL語言與ASIC原理][王金明verilog源碼](78頁珍藏版)》請在裝配圖網上搜索。
1、 王金明:《Verilog HDL程序設計教程》 - 1 - 【例 3.1】4 位全加器 module adder4(cout,sum,ina,inb,cin); output[3:0] sum; output cout; input[3:0] ina,inb; input cin; assign {cout,sum}=ina+inb+cin; endmodule 【例 3.2】4 位計數(shù)器 module count4(out,reset,clk); output[3:0] out; input reset,clk; reg[
2、3:0] out; always @(posedge clk) begin if (reset) out<=0; //同步復位 else out<=out+1; //計數(shù) end endmodule 【例 3.3】4 位全加器的仿真程序 `timescale 1ns/1ns `include "adder4.v" module adder_tp; //測試模塊的名字 reg[3:0] a,b; //測試輸入信號定義為reg型 reg cin;
3、 wire[3:0] sum; //測試輸出信號定義為wire型 wire cout; integer i,j; adder4 adder(sum,cout,a,b,cin); //調用測試對象 always #5 cin=~cin; //設定cin的取值 initial begin a=0;b=0;cin=0; for(i=1;i<16;i=i+1) #10 a=i; //設定a的取值 end 程序文本 - 2 - initial begin for(
4、j=1;j<16;j=j+1) #10 b=j; //設定b的取值 end initial //定義結果顯示格式 begin $monitor($time,,,"%d + %d + %b={%b,%d}",a,b,cin,cout,sum); #160 $finish; end endmodule 【例 3.4】4 位計數(shù)器的仿真程序 `timescale 1ns/1ns `include "count4.v" module coun4_tp; reg clk,res
5、et; //測試輸入信號定義為reg型 wire[3:0] out; //測試輸出信號定義為wire型 parameter DELY=100; count4 mycount(out,reset,clk); //調用測試對象 always #(DELY/2) clk = ~clk; //產生時鐘波形 initial begin //激勵信號定義 clk =0; reset=0; #DELY reset=1; #DELY reset=0;
6、 #(DELY*20) $finish; end //定義結果顯示格式 initial $monitor($time,,,"clk=%d reset=%d out=%d", clk, reset,out); endmodule 【例 3.5】 “與-或-非”門電路 module AOI(A,B,C,D,F); //模塊名為AOI(端口列表A,B,C,D,F(xiàn)) input A,B,C,D; //模塊的輸入端口為A,B,C,D output F; //模塊的輸出端口為F 王金明:《Verilog HDL程序設
7、計教程》 - 3 - wire A,B,C,D,F; //定義信號的數(shù)據(jù)類型 assign F= ~((A&B)|(C&D)); //邏輯功能描述 endmodule 【例 5.1】用 case語句描述的 4 選 1 數(shù)據(jù)選擇器 module mux4_1(out,in0,in1,in2,in3,sel); output out; input in0,in1,in2,in3; input[1:0] sel; reg out; always @(in0 or in1 or in2 or in3
8、or sel) //敏感信號列表 case(sel) 2'b00: out=in0; 2'b01: out=in1; 2'b10: out=in2; 2'b11: out=in3; default: out=2'bx; endcase endmodule 【例 5.2】同步置數(shù)、同步清零的計數(shù)器 module count(out,data,load,reset,clk); output[7:0] out; input[7:0] data; input load,clk,reset; reg[7:
9、0] out; always @(posedge clk) //clk上升沿觸發(fā) begin if (!reset) out = 8'h00; //同步清0,低電平有效 else if (load) out = data; //同步預置 else out = out + 1; //計數(shù) end endmodule 【例 5.3】用 always 過程語句描述的簡單算術邏輯單元 `define add 3'd0 `define minus 3'd1 `define ba
10、nd 3'd2 `define bor 3'd3 `define bnot 3'd4 程序文本 - 4 - module alu(out,opcode,a,b); output[7:0] out; reg[7:0] out; input[2:0] opcode; //操作碼 input[7:0] a,b; //操作數(shù) always@(opcode or a or b) //電平敏感的always塊 begin case(opcode) `add: out = a+b; //加操作 `m
11、inus: out = a-b; //減操作 `band: out = a&b; //求與 `bor: out = a|b; //求或 `bnot: out=~a; //求反 default: out=8'hx; //未收到指令時,輸出任意態(tài) endcase end endmodule 【例 5.4】用 initial過程語句對測試變量 A、B、C 賦值 `timescale 1ns/1ns module test; reg A,B,C; initial
12、 begin A = 0; B = 1; C = 0; #50 A = 1; B = 0; #50 A = 0; C = 1; #50 B = 1; #50 B = 0; C = 0; #50 $finish ; end endmodule 【例 5.5】用 begin-end 串行塊產生信號波形 `timescale 10ns/1ns module wave1; reg wave; parameter cycle=10; initial begin 王金明
13、:《Verilog HDL程序設計教程》 - 5 - wave=0; #(cycle/2) wave=1; #(cycle/2) wave=0; #(cycle/2) wave=1; #(cycle/2) wave=0; #(cycle/2) wave=1; #(cycle/2) $finish ; end initial $monitor($time,,,"wave=%b",wave); endmodule 【例 5.6】用 fork-join 并行塊產生信號波形 `timescal
14、e 10ns/1ns module wave2; reg wave; parameter cycle=5; initial fork wave=0; #(cycle) wave=1; #(2*cycle) wave=0; #(3*cycle) wave=1; #(4*cycle) wave=0; #(5*cycle) wave=1; #(6*cycle) $finish; join initial $monitor($time,,,"wave=%b",wave); endmodule
15、 【例 5.7】持續(xù)賦值方式定義的 2 選 1 多路選擇器 module MUX21_1(out,a,b,sel); input a,b,sel; output out; assign out=(sel==0)?a:b; //持續(xù)賦值,如果sel為0,則out=a ;否則out=b endmodule 【例 5.8】阻塞賦值方式定義的 2 選 1 多路選擇器 module MUX21_2(out,a,b,sel); input a,b,sel; 程序文本 - 6 - output out; reg out; alw
16、ays@(a or b or sel) begin if(sel==0) out=a; //阻塞賦值 else out=b; end endmodule 【例 5.9】非阻塞賦值 module non_block(c,b,a,clk); output c,b; input clk,a; reg c,b; always @(posedge clk) begin b<=a; c<=b; end endmodule 【例 5.10】阻塞賦
17、值 module block(c,b,a,clk); output c,b; input clk,a; reg c,b; always @(posedge clk) begin b=a; c=b; end endmodule 【例 5.11】模為 60 的 BCD碼加法計數(shù)器 module count60(qout,cout,data,load,cin,reset,clk); output[7:0] qout; output cout; input[7:0] data; input loa
18、d,cin,clk,reset; reg[7:0] qout; always @(posedge clk) //clk上升沿時刻計數(shù) 王金明:《Verilog HDL程序設計教程》 - 7 - begin if (reset) qout<=0; //同步復位 else if(load) qout<=data; //同步置數(shù) else if(cin) begin if(qout[3:0]==9) //低位是否為9,是則 begin qout[3:0]<=0;
19、 //回0,并判斷高位是否為5 if (qout[7:4]==5) qout[7:4]<=0; else qout[7:4]<=qout[7:4]+1; //高位不為5,則加1 end else //低位不為9,則加1 qout[3:0]<=qout[3:0]+1; end end assign cout=((qout==8'h59)&cin)?1:0; //產生進位輸出信號 endmodule 【例 5.12】BCD碼—七段數(shù)碼管顯示譯碼器 module decode4_7(decodeo
20、ut,indec); output[6:0] decodeout; input[3:0] indec; reg[6:0] decodeout; always @(indec) begin case(indec) //用case語句進行譯碼 4'd0:decodeout=7'b1111110; 4'd1:decodeout=7'b0110000; 4'd2:decodeout=7'b1101101; 4'd3:decodeout=7'b1111001; 4
21、'd4:decodeout=7'b0110011; 4'd5:decodeout=7'b1011011; 4'd6:decodeout=7'b1011111; 4'd7:decodeout=7'b1110000; 4'd8:decodeout=7'b1111111; 4'd9:decodeout=7'b1111011; default: decodeout=7'bx; endcase end 程序文本 - 8 - endmodule 【例 5.13】用 casez 描述
22、的數(shù)據(jù)選擇器 module mux_casez(out,a,b,c,d,select); output out; input a,b,c,d; input[3:0] select; reg out; always @(select or a or b or c or d) begin casez(select) 4'b???1: out = a; 4'b??1?: out = b; 4'b?1??: out = c; 4'b1???: out = d; endcase end endmodule 【例 5.1
23、4】隱含鎖存器舉例 module buried_ff(c,b,a); output c; input b,a; reg c; always @(a or b) begin if((b==1)&&(a==1)) c=a&b; end endmodule 【例 5.15】用 for 語句描述的七人投票表決器 module voter7(pass,vote); output pass; input[6:0] vote; reg[2:0] sum; integer i; reg pass; always @(vote)
24、 begin sum=0; 王金明:《Verilog HDL程序設計教程》 - 9 - for(i=0;i<=6;i=i+1) //for語句 if(vote[i]) sum=sum+1; if(sum[2]) pass=1; //若超過4人贊成,則pass=1 else pass=0; end endmodule 【例 5.16】用 for 語句實現(xiàn) 2 個 8 位數(shù)相乘 module mult_for(outcome,a,b); parameter size=8; input[size
25、:1] a,b; //兩個操作數(shù) output[2*size:1] outcome; //結果 reg[2*size:1] outcome; integer i; always @(a or b) begin outcome=0; for(i=1; i<=size; i=i+1) //for語句 if(b[i]) outcome=outcome +(a << (i-1)); end endmodule 【例 5.17】用 repeat 實現(xiàn) 8 位二進制數(shù)的乘法 module mu
26、lt_repeat(outcome,a,b); parameter size=8; input[size:1] a,b; output[2*size:1] outcome; reg[2*size:1] temp_a,outcome; reg[size:1] temp_b; always @(a or b) begin outcome=0; temp_a=a; temp_b=b; repeat(size) //repeat語句,size為循環(huán)次數(shù) begin if(temp_b[1]) //如果temp_b的最
27、低位為1,就執(zhí)行下面的加法 outcome=outcome+temp_a; temp_a=temp_a<<1; //操作數(shù)a左移一位 程序文本 - 10 - temp_b=temp_b>>1; //操作數(shù)b右移一位 end end endmodule 【例 5.18】同一循環(huán)的不同實現(xiàn)方式 module loop1; //方式1 integer i; initial for(i=0;i<4;i=i+1) //for語句 begin $display(“i=%h”,i)
28、; end endmodule module loop2; //方式2 integer i; initial begin i=0; while(i<4) //while語句 begin $display ("i=%h",i); i=i+1; end end endmodule module loop3; //方式3 integer i; initial begin i=0; repeat(4) //repeat語句 beg
29、in $display ("i=%h",i); i=i+1; end end endmodule 【例 5.19】使用了`include 語句的 16 位加法器 王金明:《Verilog HDL程序設計教程》 - 11 - `include "adder.v" module adder16(cout,sum,a,b,cin); output cout; parameter my_size=16; output[my_size-1:0] sum; input[my_size-1:0] a,b; input cin;
30、 adder my_adder(cout,sum,a,b,cin); //調用adder模塊 endmodule //下面是adder模塊代碼 module adder(cout,sum,a,b,cin); parameter size=16; output cout; output[size-1:0] sum; input cin; input[size-1:0] a,b; assign {cout,sum}=a+b+cin; endmodule 【例 5.20】條件編譯舉例 module compile(out,A,B)
31、; output out; input A,B; `ifdef add //宏名為add assign out=A+B; `else assign out=A-B; `endif endmodule 【例 6.1】加法計數(shù)器中的進程 module count(data,clk,reset,load,cout,qout); output cout; output[3:0] qout; reg[3:0] qout; input[3:0] data; input clk,re
32、set,load; 程序文本 - 12 - always @(posedge clk) //進程1,always過程塊 begin if (!reset) qout= 4'h00; //同步清0,低電平有效 else if (load) qout= data; //同步預置 else qout=qout + 1; //加法計數(shù) end assign cout=(qout==4'hf)?1:0; //進程2,用持續(xù)賦值產生進位信號 endmodule
33、 【例 6.2】任務舉例 module alutask(code,a,b,c); input[1:0] code; input[3:0] a,b; output[4:0] c; reg[4:0] c; task my_and; //任務定義,注意無端口列表 input[3:0] a,b; //a,b,out名稱的作用域范圍為task任務內部 output[4:0] out; integer i; begin for(i=3;i>=0;i=i-1) out[i]=a
34、[i]&b[i]; //按位與 end endtask always@(code or a or b) begin case(code) 2'b00: my_and(a,b,c); /* 調用任務my_and,需注意端口列表的順序應與任務定義中的一致,這里的 a,b,c 分別對應任務定義中的a,b,out */ 2'b01: c=a|b; //或 2'b10: c=a-b; //相減 2'b
35、11: c=a+b; //相加 endcase end endmodule 王金明:《Verilog HDL程序設計教程》 - 13 - 【例 6.3】測試程序 `include "alutask.v" module alu_tp; reg[3:0] a,b; reg[1:0] code; wire[4:0] c; parameter DELY = 100; alutask ADD(code,a,b,c); //調用被測試模塊 initial begin
36、 code=4'd0; a= 4'b0000; b= 4'b1111; #DELY code=4'd0; a= 4'b0111; b= 4'b1101; #DELY code=4'd1; a= 4'b0001; b= 4'b0011; #DELY code=4'd2; a= 4'b1001; b= 4'b0011; #DELY code=4'd3; a= 4'b0011; b= 4'b0001; #DELY code=4'd3; a= 4'b0111; b= 4'b1001; #DELY $finish; end init
37、ial $monitor($time,,,"code=%b a=%b b=%b c=%b", code,a,b,c); endmodule 【例 6.4】函數(shù) function[7:0] get0; input[7:0] x; reg[7:0] count; integer i; begin count=0; for (i=0;i<=7;i=i+1) if (x[i]=1'b0) count=count+1; get0=count; end endfunction 【例 6.5】用函數(shù)和 case語句描述的編
38、碼器(不含優(yōu)先順序) module code_83(din,dout); input[7:0] din; output[2:0] dout; 程序文本 - 14 - function[2:0] code; //函數(shù)定義 input[7:0] din; //函數(shù)只有輸入,輸出為函數(shù)名本身 casex (din) 8'b1xxx_xxxx : code = 3'h7; 8'b01xx_xxxx : code = 3'h6; 8'b001x_xxxx : code = 3'h5;
39、8'b0001_xxxx : code = 3'h4; 8'b0000_1xxx : code = 3'h3; 8'b0000_01xx : code = 3'h2; 8'b0000_001x : code = 3'h1; 8'b0000_000x : code = 3'h0; default: code = 3'hx; endcase endfunction assign dout = code(din) ; //函數(shù)調用 endmodule 【例 6.6】階乘運算函數(shù) module funct(clk,n,resul
40、t,reset); output[31:0] result; input[3:0] n; input reset,clk; reg[31:0] result; always @(posedge clk) //在clk的上升沿時執(zhí)行運算 begin if(!reset) result<=0; //復位 else begin result <= 2 * factorial(n); //調用factorial函數(shù) end end function[31:0] factorial; //階乘運算
41、函數(shù)定義(注意無端口列表) input[3:0] opa; //函數(shù)只能定義輸入端, 輸出端口為函數(shù)名本身 reg[3:0] i; begin factorial = opa ? 1 : 0; for(i= 2; i <= opa; i = i+1) //該句若要綜合通過,opa應賦具體的數(shù)值 factorial = i* factorial; //階乘運算 end 王金明:《Verilog HDL程序設計教程》 - 15 - endfunction endmodule 【例 6.7】測試程序
42、 `define clk_cycle 50 `include "funct.v" module funct_tp; reg[3:0] n; reg reset,clk; wire[31:0] result; initial //定義激勵向量 begin n=0; reset=1; clk=0; for(n=0;n<=15;n=n+1) #100 n=n; end initial $monitor($time,,,"n=%d result=%d",n,result); //
43、定義輸出顯示格式 always # `clk_cycle clk=~clk; //產生時鐘信號 funct funct_try(.clk(clk),.n(n),.result(result),.reset(reset)); //調用被測試模塊 endmodule 【例 6.8】順序執(zhí)行模塊 1 module serial1(q,a,clk); output q,a; input clk; reg q,a; always @(posedge clk) begin
44、 q=~q; a=~q; end endmodule 【例 6.9】順序執(zhí)行模塊 2 module serial2(q,a,clk); output q,a; 程序文本 - 16 - input clk; reg q,a; always @(posedge clk) begin a=~q; q=~q; end endmodule 【例 6.10】并行執(zhí)行模塊 1 module paral1(q,a,clk); output q,a;
45、 input clk; reg q,a; always @(posedge clk) begin q=~q; end always @(posedge clk) begin a=~q; end endmodule 【例 6.11】并行執(zhí)行模塊 2 module paral2(q,a,clk); output q,a; input clk; reg q,a; always @(posedge clk) begin a=~q; end always @(posedg
46、e clk) begin q=~q; end endmodule 【例 7.1】調用門元件實現(xiàn)的 4 選 1 MUX 王金明:《Verilog HDL程序設計教程》 - 17 - module mux4_1a(out,in1,in2,in3,in4,cntrl1,cntrl2); output out; input in1,in2,in3,in4,cntrl1,cntrl2; wire notcntrl1,notcntrl2,w,x,y,z; not (notcntrl1,cntrl2), (notcntrl2,cn
47、trl2); and (w,in1,notcntrl1,notcntrl2), (x,in2,notcntrl1,cntrl2), (y,in3,cntrl1,notcntrl2), (z,in4,cntrl1,cntrl2); or (out,w,x,y,z); endmodule 【例 7.2】用 case語句描述的 4 選 1 MUX module mux4_1b(out,in1,in2,in3,in4,cntrl1,cntrl2); output out; input in1,in2,in3,in4,cntrl1,cntrl
48、2; reg out; always@(in1 or in2 or in3 or in4 or cntrl1 or cntrl2) case({cntrl1,cntrl2}) 2'b00:out=in1; 2'b01:out=in2; 2'b10:out=in3; 2'b11:out=in4; default:out=2'bx; endcase endmodule 【例 7.3】行為描述方式實現(xiàn)的 4 位計數(shù)器 module count4(clk,clr,out); input clk,clr; output[3
49、:0] out; reg[3:0] out; always @(posedge clk or posedge clr) begin if (clr) out<=0; else out<=out+1; end endmodule 程序文本 - 18 - 【例 7.4】數(shù)據(jù)流方式描述的 4 選 1 MUX module mux4_1c(out,in1,in2,in3,in4,cntrl1,cntrl2); output out; input in1,in2,in3,in4,cntrl1,cntrl2; assign out=(
50、in1 & ~cntrl1 & ~cntrl2)|(in2 & ~cntrl1 & cntrl2)| (in3 & cntrl1 & ~cntrl2)|(in4 & cntrl1 & cntrl2); endmodule 【例 7.5】用條件運算符描述的 4 選 1 MUX module mux4_1d(out,in1,in2,in3,in4,cntrl1,cntrl2); output out; input in1,in2,in3,in4,cntrl1,cntrl2; assign out=cntrl1 ? (cntrl2 ? in4:in3):(cntrl
51、2 ? in2:in1); endmodule 【例 7.6】門級結構描述的 2 選 1MUX module mux2_1a(out,a,b,sel); output out; input a,b,sel; not (sel_,sel); and (a1,a,sel_), (a2,b,sel); or (out,a1,a2); endmodule 【例 7.7】行為描述的 2 選 1MUX module mux2_1b(out,a,b,sel); output out; input a,b,sel; reg out;
52、 always @(a or b or sel) begin if(sel) out = b; else out = a; end endmodule 【例 7.8】數(shù)據(jù)流描述的 2 選 1MUX module MUX2_1c(out,a,b,sel); output out; 王金明:《Verilog HDL程序設計教程》 - 19 - input a,b,sel; assign out = sel ? b : a; endmodule 【例 7.9】調用門元件實現(xiàn)的 1 位半加器
53、 module half_add1(a,b,sum,cout); input a,b; output sum,cout; and (cout,a,b); xor (sum,a,b); endmodule 【例 7.10】數(shù)據(jù)流方式描述的 1 位半加器 module half_add2(a,b,sum,cout); input a,b; output sum,cout; assign sum=a^b; assign cout=a&b; endmodule 【例 7.11】采用行為描述的 1 位半加器 module h
54、alf_add3(a,b,sum,cout); input a,b; output sum,cout; reg sum,cout; always @(a or b) begin case ({a,b}) //真值表描述 2'b00: begin sum=0; cout=0; end 2'b01: begin sum=1; cout=0; end 2'b10: begin sum=1; cout=0; end 2'b11: begin sum=0; cout=1; end endcase end
55、 endmodule 【例 7.12】采用行為描述的 1 位半加器 module half_add4(a,b,sum,cout); input a,b; output sum,cout; 程序文本 - 20 - reg sum,cout; always @(a or b) begin sum= a^b; cout=a&b; end endmodule 【例 7.13】調用門元件實現(xiàn)的 1 位全加器 module full_add1(a,b,cin,sum,cout); input a,b,cin; output su
56、m,cout; wire s1,m1,m2,m3; and (m1,a,b), (m2,b,cin), (m3,a,cin); xor (s1,a,b), (sum,s1,cin); or (cout,m1,m2,m3); endmodule 【例 7.14】數(shù)據(jù)流描述的 1 位全加器 module full_add2(a,b,cin,sum,cout); input a,b,cin; output sum,cout; assign sum = a ^ b ^ cin; assign cout = (a & b)|(b &
57、 cin)|(cin & a); endmodule 【例 7.15】1 位全加器 module full_add3(a,b,cin,sum,cout); input a,b,cin; output sum,cout; assign {cout,sum}=a+b+cin; endmodule 【例 7.16】行為描述的 1 位全加器 module full_add4(a,b,cin,sum,cout); input a,b,cin; output sum,cout; 王金明:《Verilog HDL程序設計教程》 - 21 -
58、 reg sum,cout; //在always塊中被賦值的變量應定義為reg型 reg m1,m2,m3; always @(a or b or cin) begin sum = (a ^ b) ^ cin; m1 = a & b; m2 = b & cin; m3 = a & cin; cout = (m1|m2)|m3; end endmodule 【例 7.17】混合描述的 1 位全加器 module full_add5(a,b,cin,sum,cout); input a,b,cin; output su
59、m,cout; reg cout,m1,m2,m3; //在always塊中被賦值的變量應定義為reg型 wire s1; xor x1(s1,a,b); //調用門元件 always @(a or b or cin) //always塊語句 begin m1 = a & b; m2 = b & cin; m3 = a & cin; cout = (m1| m2) | m3; end assign sum = s1 ^ cin; //assign持續(xù)賦值語句 endmo
60、dule 【例 7.18】結構描述的 4 位級連全加器 `include "full_add1.v" module add4_1(sum,cout,a,b,cin); output[3:0] sum; output cout; input[3:0] a,b; input cin; full_add1 f0(a[0],b[0],cin,sum[0],cin1); //級連描述 full_add1 f1(a[1],b[1],cin1,sum[1],cin2); full_add1 f2(a[2],b[2],cin2,sum[2],cin
61、3); 程序文本 - 22 - full_add1 f3(a[3],b[3],cin3,sum[3],cout); endmodule 【例 7.19】數(shù)據(jù)流描述的 4 位全加器 module add4_2(cout,sum,a,b,cin); output[3:0] sum; output cout; input[3:0] a,b; input cin; assign {cout,sum}=a+b+cin; endmodule 【例 7.20】行為描述的 4 位全加器 module add4_3(cout,sum,a,b,
62、cin); output[3:0] sum; output cout; input[3:0] a,b; input cin; reg[3:0] sum; reg cout; always @(a or b or cin) begin {cout,sum}=a+b+cin; end endmodule 【例 8.1】$time 與$real time 的區(qū)別 `timescale 10ns/1ns module time_dif; reg ts; parameter delay=2.6; initial beg
63、in #delay ts=1; #delay ts=0; #delay ts=1; #delay ts=0; end initial $monitor($time,,,"ts=%b",ts); //使用函數(shù)$time 王金明:《Verilog HDL程序設計教程》 - 23 - endmodule 【例 8.2】$random 函數(shù)的使用 `timescale 10ns/1ns module random_tp; integer data; integer i; par
64、ameter delay=10; initial $monitor($time,,,"data=%b",data); initial begin for(i=0; i<=100; i=i+1) #delay data=$random; //每次產生一個隨機數(shù) end endmodule 【例 8.3】1 位全加器進位輸出 UDP 元件 primitive carry_udp(cout,cin,a,b); input cin,a,b; output cout; table //cin
65、 a b : cout //真值表 0 0 0 : 0; 0 1 0 : 0; 0 0 1 : 0; 0 1 1 : 1; 1 0 0 : 0; 1 0 1 : 1; 1 1 0 : 1; 1 1 1 : 1; endtable endprimitive 【例 8.4】包含 x 態(tài)輸入的 1 位全加器進位輸出 UDP 元件 primitive carry_udpx1(cout,cin,a,
66、b); input cin,a,b; output cout; table // cin a b : cout //真值表 0 0 0 : 0; 程序文本 - 24 - 0 1 0 : 0; 0 0 1 : 0; 0 1 1 : 1; 1 0 0 : 0; 1 0 1 : 1; 1 1 0 : 1; 1 1 1 : 1; 0 0 x : 0; //只要有兩個輸入為0,則進位輸出肯定為0 0 x 0 : 0; x 0 0 : 0; 1 1 x : 1; //只要有兩個輸入為1,則進位輸出肯定為1 1 x 1 : 1; x 1 1 : 1; endtable endprimitive 【例 8.5】用簡縮符“?”表述的 1 位全加器進位輸出 UD
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
5. 裝配圖網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 市教育局冬季運動會安全工作預案
- 2024年秋季《思想道德與法治》大作業(yè)及答案3套試卷
- 2024年教師年度考核表個人工作總結(可編輯)
- 2024年xx村兩委涉案資金退還保證書
- 2024年憲法宣傳周活動總結+在機關“弘揚憲法精神推動發(fā)改工作高質量發(fā)展”專題宣講報告會上的講話
- 2024年XX村合作社年報總結
- 2024-2025年秋季第一學期初中歷史上冊教研組工作總結
- 2024年小學高級教師年終工作總結匯報
- 2024-2025年秋季第一學期初中物理上冊教研組工作總結
- 2024年xx鎮(zhèn)交通年度總結
- 2024-2025年秋季第一學期小學語文教師工作總結
- 2024年XX村陳規(guī)陋習整治報告
- 2025年學校元旦迎新盛典活動策劃方案
- 2024年學校周邊安全隱患自查報告
- 2024年XX鎮(zhèn)農村規(guī)劃管控述職報告