±±Óʵç×ÓԺרҵʵÑ鱨¸æ ÏÂÔØ±¾ÎÄ

µç×Ó¹¤³ÌѧԺ

ASICרҵʵÑ鱨¸æ

°à¼¶£º ÐÕÃû£º ѧºÅ£º °àÄÚÐòºÅ£º

µÚÒ»²¿·Ö ÓïÑÔ¼¶·ÂÕæ

LAB 1£º¼òµ¥µÄ×éºÏÂß¼­Éè¼Æ

Ò»¡¢ ¶þ¡¢

ʵÑéÄ¿µÄ ʵÑéÔ­Àí

ÕÆÎÕ»ù±¾×éºÏÂß¼­µç·µÄʵÏÖ·½·¨¡£

±¾ÊµÑéÖÐÃèÊöµÄÊÇÒ»¸ö¿É×ۺϵĶþѡһ¿ª¹Ø£¬ËüµÄ¹¦ÄÜÊǵ±sel = 0ʱ£¬¸ø³öout = a£¬·ñÔò¸ø³ö½á¹ûout = b¡£ÔÚVerilog HDLÖУ¬ÃèÊö×éºÏÂß¼­Ê±³£Ê¹ÓÃassign½á¹¹¡£equal=(a==b)?1:0ÊÇÒ»ÖÖÔÚ×éºÏÂß¼­ÊµÏÖ·ÖÖ§ÅжÏʱ³£Óõĸñʽ¡£parameter¶¨ÒåµÄsize²ÎÊý¾ö¶¨Î»¿í¡£²âÊÔÄ£¿éÓÃÓÚ¼ì²âÄ£¿éÉè¼ÆµÄÊÇ·ñÕýÈ·£¬Ëü¸ø³öÄ£¿éµÄÊäÈëÐźţ¬¹Û²ìÄ£¿éµÄÄÚ²¿ÐźźÍÊä³öÐźš£

Èý¡¢ Ô´´úÂë

mux.v

module scale_mux(out,sel,b,a); parameter size=1; output[size-1:0] out; input[size-1:0]b,a; input sel;

assign out = (!sel)?a: (sel)?b:

{size{1'bx}}; endmodule

mux_test.v `define width 8 `timescale 1 ns/1 ns module mux_test; reg[`width:1]a,b; wire[`width:1]out; reg sel;

scale_mux#(`width)m1(.out(out),.sel(sel),.b(b),.a(a)); initial begin

$monitor($stime,,\ $dumpvars(2,mux_test);

sel=0;b={`width{1'b0}};a={`width{1'b1}}; #5sel=0;b={`width{1'b1}};a={`width{1'b0}}; #5sel=1;b={`width{1'b0}};a={`width{1'b1}}; #5sel=1;b={`width{1'b1}};a={`width{1'b0}}; #5 $finish; end

endmodule

ËÄ¡¢ ·ÂÕæ½á¹ûÓ벨ÐÎ

LAB 2£º¼òµ¥Ê±ÐòÂß¼­µç·µÄÉè¼Æ

Ò»¡¢ ¶þ¡¢

ʵÑéÄ¿µÄ ʵÑéÔ­Àí

ÕÆÎÕ»ù±¾Ê±ÐòÂß¼­µç·µÄʵÏÖ¡£

ÔÚVerilog HDLÖУ¬Ïà¶ÔÓÚ×éºÏÂß¼­µç·£¬Ê±ÐòÂß¼­µç·ҲÓй涨µÄ±íÊö·½Ê½¡£ÔÚ¿É×ۺϵÄVerilog HDLÄ£ÐÍÖУ¬ÎÒÃdz£Ê¹ÓÃalways¿éºÍ@(posedge clk)»ò@(negedge clk)µÄ½á¹¹À´±íÊöʱÐòÂß¼­¡£

ÔÚalways¿éÖУ¬±»¸³ÖµµÄÐźŶ¼±ØÐ붨ÒåΪregÐÍ£¬ÕâÊÇÓÉʱÐòÂß¼­µç·µÄÌØµãËù¾ö¶¨µÄ¶ÔÓÚregÐÍÊý¾Ý£¬Èç¹ûδ¶ÔËü½øÐи³Öµ£¬·ÂÕæ¹¤¾ß»áÈÏΪËüÊDz»¶¨Ì¬¡£ÎªÁËÕýÈ·µØ¹Û²ìµ½·ÂÕæ½á¹û£¬ÔÚ¿É×ۺϵÄÄ£¿éÖÐÎÒÃÇͨ³£¶¨ÒåÒ»¸ö¸´Î»ÐźÅrst-£¬µ±ËüΪµÍµçƽʱ¶Ôµç·ÖеļĴæÆ÷½øÐи´Î»¡£

Èý¡¢ Ô´´úÂë

counter.v

`timescale 1 ns/100 ps

module counter(cnt,clk,data,rst_,load);

output[4:0]cnt ; input [4:0]data;

input clk; input rst_; input load; reg [4:0]cnt;

always@(posedge clk or negedge rst_) if(!rst_)

#1.2 cnt<=0; else if(load)

cnt<=#3 data; else

cnt<=#4 cnt + 1; endmodule

counter_test.v `timescale 1 ns/1 ns module counter_test;

wire[4:0]cnt; reg [4:0]data; reg rst_; reg load; reg clk;

counter c1 (

.cnt (cnt),