ʵÑéÈý ÀûÓÃÌõ¼þÓï¾äʵÏÖ¼ÆÊý·ÖƵʱÐòµç·
Ò»£®ÊµÑéÄ¿µÄ£º
1£®ÕÆÎÕÌõ¼þÓï¾äÔÚ¼òµ¥Ê±ÐòÄ£¿éÉè¼ÆÖеÄʹÓá£
2£®Ñ§Ï°ÔÚVerilogÄ£¿éÖÐÓ¦ÓüÆÊýÆ÷¡£
3£®Ñ§Ï°²âÊÔÄ£¿éµÄ±àд¡¢×ۺϺͲ»Í¬²ã´ÎµÄ·ÂÕæ¡£ ¶þ£®ÊµÑéÉ豸£º
°²×°Modelsim-6.5cµÄPC»ú¡£ Èý£®ÊµÑéÄÚÈÝ£º
·ÂÕæÒ»¸ö¿É×ۺϷç¸ñµÄ·ÖƵÆ÷£¬½«10MBµÄʱÖÓ·ÖÆµÎª500KBµÄʱÖÓ£¬¶¨ÒåÒ»¸ö¼ÆÊýÆ÷£¬ÔÀíͬ1/2·ÖƵÆ÷Ò»Ñù£¬Ö»²»¹ý·ÖƵ±äΪ1/20¡£
ËÄ£®ÊµÑé´úÂë
module fdivision(RESET,F10M,F500K); input RESET,F10M; output F500K; reg F500K; reg[7:0]j;
always @(posedge F10M) if(!RESET) begin
F500K <= 0; j<=0; end else begin if(j==9) begin j<=0;
F500K =~ F500K; end else
j<=j+1; end endmodule
`timescale 1ns/1ps `define clk_cycle 50 module division_Top; reg F10M,RESET; wire F500K_clk;
always #`clk_cycle F10M=~F10M; initial begin
RESET=1; F10M=0;
#100 RESET=0; #100 RESET=1; #10000 $stop; end
fdivision fdivision(.RESET(RESET),.F10M(F10M),.F500K(F500K_clk)); endmodule
Î壮×ۺϷÂÕæ½á¹û
ʵÑéËÄ ×èÈû¸³ÖµÓë·Ç×èÈû¸³ÖµµÄÇø±ð
Ò»£®ÊµÑéÄ¿µÄ£º
1£®Í¨¹ýʵÑé,ÕÆÎÕ×èÈû¸³ÖµÓë·Ç×èÈû¸³ÖµµÄ¸ÅÄîºÍÇø±ð¡£ 2£®Á˽â·Ç×èÈûºÍ×èÈû¸³ÖµµÄ²»Í¬Ê¹Óó¡ºÏ¡£ 3£®Ñ§Ï°²âÊÔÄ£¿éµÄ±àд¡¢×ۺϺͲ»Í¬²ã´ÎµÄ·ÂÕæ¡£ ¶þ£®ÊµÑéÉ豸£º
°²×°Modelsim-6.5cµÄPC»ú¡£
Èý£®ÊµÑéÄÚÈÝ£º
Á½¸öÄ£¿é£¬Ò»¸ö×èÈû¸³Öµ£¬Ò»¸ö·Ç×èÈû¸³Öµ£¬¹Û²ìÁ½ÕßÖ®¼äµÄÇø±ð
ËÄ£®ÊµÑé´úÂë
module blocking(clk,a,b,c); output [3:0]b,c; input [3:0]a; input clk; reg [3:0]b,c;
always @(posedge clk) begin b=a; c=b;
$display(\ end endmodule //non_blocking.v
module non_blocking(clk,a,b,c); output [3:0]b,c; input [3:0]a; input clk; reg [3:0]b,c;
always @(posedge clk) begin b<=a; c<=b;
$display(\ end endmodule
//comepareTop.v `timescale 1ns/100ps module conpareTop; wire[3:0]b1,c1,b2,c2; reg[3:0]a; reg clk; initial begin clk=0;
forever #50 clk=~clk; end initial