VerilogÉÏ»úʵÑ鱨¸æ
repeat(50) begin
#100 a={$random}%6; b={$random}%6; c={$random}%6; d={$random}%6; end
#100 $stop; end
sort m(.a(a),.b(b),.c(c),.d(d),.ra(ra),.rb(rb),.rc(rc),.rd(rd));
endmodule
------------------------------·½·¨Ò»----------ÎļþÃû sort_ex_tb.v----------------------------------- `timescale 1ns/100ps `define clk_cycle 50
module t_ex; reg [7:0] a;
wire [7:0] ra,rb,rc,rd; reg clk,reset;
always #`clk_cycle clk= ~clk;
initial begin a=0; clk=0; reset =1;
#10 reset=0; #110 reset=1;
repeat(50) begin
#100 a={$random}%6; end
#100 $stop; end
sort_ex sort_ex(clk,reset,ra,rb,rc,rd,a);
endmodule
33
VerilogÉÏ»úʵÑ鱨¸æ
Áù¡¢ ·ÂÕæ²¨ÐÎ
·½·¨Ò»£º
·½·¨¶þ£º
Æß¡¢ ×ܽἰ¶Ô²¨ÐεÄ˵Ã÷
1. ·½·¨Ò»ÊµÑé½áÂÛ
´Ó²¨ÐÎÖпÉÒÔ¿´³ö£¬Ã¿´ÎÊäÈëÒ»×éa£¬b£¬c£¬d£¬¶¼»áÊä³öÒ»×éra£¬rb£¬rc£¬rd¡£²¢ÇÒÓÐra 2. ·½·¨¶þʵÑé½áÂÛ ´Ó²¨ÐÎÖпÉÒÔ¿´³ö£¬Ã¿´Î±È½ÏÍê³ÉÐèÒªËĸöʱÖÓÖÜÆÚÀ´°ÑËĸöÊý¾Ý¶¼ÊäÈë¡£ÔÚÿ¸öʱÖÓÖÜÆÚÖж¼½øÐÐÁËÒ»´Î±È½Ï£¬Ã¿´Î¶¼°Ñ×î´óµÄÊýÒÆµ½rdµÄλÖÃÉÏ¡£ÔÚËĸöʱÖÓÖÜÆÚÍê³Éºó£¬ÓÐra 3. ʵÑé×Ü½á ±¾´ÎʵÑéÊÇVerilogÉÏ»úµÄµÚÆß¸öʵÑ飬·Ö±ðÍê³ÉÁ˶Բ¢ÐÐÊäÈëÊý¾ÝºÍ´®ÐÐÊäÈëÊý¾ÝµÄðÅÝÅÅÐòÒÔ¼°²¢ÐÐÊä³ö¡£´ÓЧÂÊÉÏÀ´Ëµ·½·¨Ò»µÄЧÂʱȽϸߣ¬ÒòΪֻÐèÒª½øÐÐÒ»´Î±È½Ï£¬ÐèҪʱ¼ä¶Ì¡£µ«ÊÇ·½·¨¶þÍê³ÉÁË´®ÐÐת²¢ÐеÄÊý¾Ý±ä»»¹¤×÷£¬±È·½·¨Ò»µÄ¹¦ÄܸüÇ¿¡£ 34 VerilogÉÏ»úʵÑ鱨¸æ ʵÑé°Ë ÀûÓÃÓÐÏÞ״̬»ú½øÐÐʱÐòÂß¼µÄÉè¼Æ Ò»¡¢ ʵÑéÄ¿µÄ 1. ÕÆÎÕÀûÓÃÓÐÏÞ״̬»úʵÏÖÒ»°ãʱÐòÂß¼·ÖÎöµÄ·½·¨£» 2. ÕÆÎÕÓÃVerilog±àд¿É×ۺϵÄÓÐÏÞ״̬»úµÄ±ê׼ģ°å£» 3. ÕÆÎÕÓÃVerilog±àд״̬»úÄ£¿éµÄ²âÊÔÎļþµÄÒ»°ã·½·¨ ¶þ¡¢ ʵÑéÄÚÈÝ Éè¼ÆÒ»¸ö´®ÐÐÊý¾Ý¼ì²âÆ÷¡£ÒªÇóÊÇ£ºÁ¬Ðø4¸ö»òÒÔÉÏΪ1ʱÊä³öΪ1£¬ÆäËûÊäÈëÇé¿öÏÂΪ0.±àд²âÊÔÄ£¿é¶ÔÉè¼ÆµÄÄ£¿é½øÐи÷ÖÖ²ã´ÎµÄ·ÂÕæ£¬²¢¹Û²ì²¨ÐΣ¬±àдʵÑ鱨¸æ¡£ Èý¡¢ ¶ÔÈÎÎñµÄÀí½â ±¾ÌâÒªÇóʵÏÖÒ»¸ö´®ÐÐÊý¾Ý¼ì²âÆ÷¡£Ò²¾ÍÊÇÀûÓÃÒ»¸öÓÐÏÞ״̬»ú£¬Ã¿Á¬Ðø³öÏÖÒ»¸ö1×´Ì¬Ìø×ªÒ»´Î¡£µ±Á¬Ðø4¸ö»ò4¸öÒÔÉÏ1ʱ£¬Ëø¶¨ÔÚij¸ö״̬£¬²¢ÇÒÊä³ö1. ËÄ¡¢ ʵÏÖ˼· ÓÃÓÐÏÞ״̬»úÍê³ÉÕâ¸öÈÎÎñ£¬ÆäÁ÷³ÌͼÈçÏ in=1&rst=1IDLE in=1&rst=1Ain=1&rst=1Bin=1&rst=1Cin=1&rst=1D 35 VerilogÉÏ»úʵÑ鱨¸æ Îå¡¢ ´úÂë 4. Ö÷³ÌÐò ---------------------------------------ÎļþÃû check.v-------------------------------------------- module seqdet(in,z,clk,rst); input in,clk,rst; output z; reg[2:0] state; wire z; parameter IDLE='d0, A='d1, B='d2, C='d3£» assign z=((state==C)&&(in==1))? 1:0; always @ (posedge clk) if(!rst) begin state<=IDLE; end else casex(state) IDLE: if(in==1) begin state<=A; end A: if(in==1) begin state<=B; end else begin state<=IDLE; end B: if(in==1) begin state<=C; end else begin state<=IDLE; end C: if(in==1) begin 36
Ïà¹ØÍÆ¼ö£º