module top;
wire [3:0]x_in;
system_clk #50 clkl(x_in[0]);
system_clk #100 clkl(x_in[1]);
system_clk #200 clkl(x_in[2]);
system_clk #400 clkl(x_in[3]);
and4_algo c1 (y_out,x_in);
endmodule
module and4_algo(y_out,x_in);
input[3:0] x_in;
output y_out;
reg y_out;
integer k;
always@(x_in)
begin:and_loop
y_out=1;
for(k=0;k<=3;k=k+1) if(x_in[k]==0) begin y_out=0; disable and_loop; end end endmodule module system_clk(clk); parameter period=100; output clk; reg clk; initial clk=0; always #(period/2)clk=~clk; always@(posedge clk) if($time>1000)
#(period-1)
$stop;
endmodule
2009年11月16日 星期一
2009.11.16
2009年11月9日 星期一
比較器
module top();
wire A_lt_B,A_gt_B,A_eq_B;
wire [1:0]A,B;
system_clock #100 clock_1(A[0]);
system_clock #200 clock_2(A[1]);
system_clock #400 clock_3(B[0]);
system_clock #800 clock_4(B[1]);
compare_2c X1(A_lt_B,A_gt_B,A_eq_B,A,B);
endmodule
module compare_2c(A_lt_B,A_gt_B,A_eq_B,A,B);
input [1:0]A,B;
output A_lt_B,A_gt_B,A_eq_B;
reg A_lt_B,A_gt_B,A_eq_B;
always @(A or B)
begin
A_lt_B=0;
A_gt_B=0;
A_eq_B=0;
if (A==B)A_eq_B=1;
else if (A>B)A_gt_B=1;
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>10000) #(PERIOD-1) $stop;
endmodule
訂閱:
文章 (Atom)