星期二, 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為修改過後正確的值


星期日, 10月 22, 2006

10/22 多工器危障實現

根據課本的hazard,使用maxpluss II 來執行 ,下圖out為多工器的輸出
,f3為修改過後的輸出

由下圖可看出out有1-hazard,f3是修改過後的值,可看出1-hazard消失了

星期二, 10月 03, 2006

10/03 Verilog 作業

四個1bit的輸入,1bit的輸出,來偵測輸入的位元中若有偶數個1則輸出為1,若有奇數個1輸出則為0.