星期二, 10月 31, 2006
1031 上課程式
module top(a,b,c,f);
input a,b,c;
output f;
wire f1,f2,f3,f4,f5;
and #10 h1(f1,a,c);
not #10 h2(f2,c);
and #10 h3(f3,b,f2);
not #30 h4(f4,f2);
or #10 h5(f5,f3,f1);
and #10 h6(f,f5,f4);
endmodule
========================================
module testbench;
reg a,b,c;
wire f;
top a1(a,b,c,f);
initial
begin
#0 c=1; a=1;b=1;
#100 c=0;
#1000 $stop;
end
endmodule
星期二, 10月 24, 2006
1024 三輸入一輸出尋找危障
使用老師上課程式加上課本尋找危障的多工器程式組合而成.使用SynaptiCAD執行
module top;
wire a,b,c;
reg C_bar,F0,F1,F2,F3,F;
system_clock #100 clock1(a);
system_clock #100 clock2(b);
system_clock #50 clock3(c);
always
begin
#3 F0=a&c;
#3 C_bar=~c;
#3 F1=b&C_bar;
#3 F=F1|F0;
#3 F2=a&b;
#3 F3=F0|F1|F2;
end
endmodule
module system_clock(clk);
parameter PERIOD=100;
output clk;
reg clk;
initial
clk=0;
always
begin#(PERIOD/2) clk=~clk;
#(PERIOD-PERIOD/2) clk=~clk;
end
always @ (posedge clk)
if ($time >1000)
#(PERIOD-1) $stop;
endmodule
將a與b的輸入都相同,只有在控制線c會改變,出來的F應與a,b輸入相同
圖中的F出現危障,經過修改以後,輸出值F3並不會出現危障
下圖F為多工器產生的危障,F3為修改過後正確的值
module top;
wire a,b,c;
reg C_bar,F0,F1,F2,F3,F;
system_clock #100 clock1(a);
system_clock #100 clock2(b);
system_clock #50 clock3(c);
always
begin
#3 F0=a&c;
#3 C_bar=~c;
#3 F1=b&C_bar;
#3 F=F1|F0;
#3 F2=a&b;
#3 F3=F0|F1|F2;
end
endmodule
module system_clock(clk);
parameter PERIOD=100;
output clk;
reg clk;
initial
clk=0;
always
begin#(PERIOD/2) clk=~clk;
#(PERIOD-PERIOD/2) clk=~clk;
end
always @ (posedge clk)
if ($time >1000)
#(PERIOD-1) $stop;
endmodule
將a與b的輸入都相同,只有在控制線c會改變,出來的F應與a,b輸入相同
圖中的F出現危障,經過修改以後,輸出值F3並不會出現危障
下圖F為多工器產生的危障,F3為修改過後正確的值
星期日, 10月 22, 2006
星期二, 10月 03, 2006
訂閱:
文章 (Atom)