±±º½verilogʵÑ鱨¸æ£¨È«£© ÏÂÔØ±¾ÎÄ

ÄÚÈÝ·¢²¼¸üÐÂʱ¼ä : 2026/2/14 8:17:05ÐÇÆÚÒ» ÏÂÃæÊÇÎÄÕµÄÈ«²¿ÄÚÈÝÇëÈÏÕæÔĶÁ¡£

Ŀ¼

ʵÑéÒ» ................................................ 2 ʵÑé¶þ ................................................ 9 ʵÑéÈý ............................................... 21 ʵÑéËÄ ............................................... 44

ʵÑéÒ»

ʵÑéÄ¿µÄ£ºÊìϤӲ¼þ¿ª·¢Á÷³Ì£¬ÕÆÎÕModelsimÉè¼ÆÓë·ÂÕæ»·¾³£¬Ñ§»á¼òµ¥×éºÏÂß¼­µç·¡¢¼òµ¥Ê±ÐòÂß¼­µç·Éè¼Æ£¬²»ÒªÇóÕÆÎÕ×ۺϺÍ×ۺϺó·ÂÕæ¡£ ʵÑéÄÚÈÝ£º±Ø×öʵÑ飺Á·Ï°Ò»¡¢¼òµ¥µÄ×éºÏÂß¼­Éè¼Æ

Á·Ï°¶þ¡¢¼òµ¥·ÖƵʱÐòÂß¼­µç·µÄÉè¼Æ

Ñ¡×öʵÑ飺ѡ×öÒ»¡¢Á·Ï°Ò»µÄÁ·Ï°Ìâ

Ñ¡×ö¶þ¡¢ 7¶ÎÊýÂë¹ÜÒëÂëµç·

Á·Ï°Ò»¡¢¼òµ¥µÄ×éºÏÂß¼­Éè¼Æ

ÃèÊöÒ»¸ö¿É×ۺϵÄÊý¾Ý±È½ÏÆ÷£¬±È½ÏÊý¾Ýa ¡¢bµÄ´óС£¬ÈôÏàͬ£¬Ôò¸ø³ö½á¹û1£¬·ñÔò¸ø³ö½á¹û0¡£ ʵÑé´úÂ룺 Ä£¿éÔ´´úÂ룺

module compare(equal,a,b); input a,b; output equal;

assign equal=(a==b)?1:0; endmodule ²âÊÔÄ£¿éÔ´´úÂ룺 `timescale 1ns/1ns `include \module t; reg a,b; wire equal; initial begin a=0; b=0; #100 a=0;b=1; #100 a=1;b=1;

2

#100 a=1;b=0; #100 a=0;b=0; #100 $stop; end

compare m(.equal(equal),.a(a),.b(b)); endmodule ʵÑ鲨ÐÎ

Á·Ï°¶þ¡¢¼òµ¥·ÖƵʱÐòÂß¼­µç·µÄÉè¼Æ

ÓÃalways¿éºÍ@(posedge clk)»ò@(negedge clk)µÄ½á¹¹±íÊöÒ»¸ö1/2·ÖƵÆ÷µÄ¿É×ÛºÏÄ£ÐÍ£¬¹Û²ìʱÐò·ÂÕæ½á¹û¡£ ʵÑé´úÂ룺 Ä£¿éÔ´´úÂ룺

module halfclk(reset,clkin,clkout); input clkin,reset; output clkout; reg clkout; always@(posedge clkin) begin if(!reset) clkout=0; else clkout=~clkout; end endmodule ²âÊÔÄ£¿éÔ´´úÂ룺 `timescale 1ns/100ps `define clkcycle 50 module tt; reg clkin,reset; wire clkout;

3

always #`clkcycle clkin=~clkin; initial begin clkin=0; reset=1; #10 reset=0; #110 reset=1; #100000 $stop; end

halfclk m0(.reset(reset),.clkin(clkin),.clkout(clkout)); endmodule

ʵÑ鲨ÐΣº

Á·Ï°Ìâ1£ºÉè¼ÆÒ»¸ö×Ö½Ú£¨8룩µÄ±È½ÏÆ÷¡£ÒªÇ󣺱ȽÏÁ½¸ö×ֽڵĴóС£¬²¢¸Äд²âÊÔÄ£ÐÍ£¬Ê¹ÆäÄܽøÐбȽÏÈ«ÃæµÄ²âÊÔ¡£¹Û²ìRTL¼¶·ÂÕæ¡¢×ۺϺóÃż¶·ÂÕæºÍ²¼Ïߺó·ÂÕæÓÐʲô²»Í¬£¬²¢ËµÃ÷²»Í¬µÄÔ­Òò¡£´ÓÎļþϵͳÖвéÔÄ×Ô¶¯Éú³ÉµÄcompare.vm,compare.voÎļþºÍcompare.vÎļþ×÷±È½Ï£¬Ëµ³ö²»Í¬µãºÍÏàͬµã¡£

ʵÑé´úÂ룺 Ä£¿éÔ´´úÂ룺

module compare1(equal,a,b); input [7:0]a,b; output equal;

assign equal=(a>b)?1:0; endmodule ²âÊÔÄ£¿éÔ´´úÂ룺 `timescale 1ns/1ns

4