µç×Ó¹¤³ÌѧԺ
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),