verilog设计è¿é¶
æ¶é´ï¼2014å¹´5æ6æ¥ææäº
主è¦æ¶è·ï¼
1.é»å¡èµå¼ä¸éé»å¡èµå¼ï¼
2.代ç æµè¯ï¼
3.ç»åé»è¾çµè·¯åæ¶åºé»è¾çµè·¯ã
é»å¡èµå¼ä¸éé»å¡èµå¼ï¼
1.é»å¡èµå¼â=âï¼ç»åé»è¾çµè·¯ï¼ï¼éé»å¡èµå¼â<=âï¼æ¶åºé»è¾çµè·¯ï¼ï¼
2.Verilog模åç¼ç¨ç8个ååï¼
(1) æ¶åºçµè·¯å»ºæ¨¡æ¶ï¼ç¨éé»å¡èµå¼ã
(2) éåå¨çµè·¯å»ºæ¨¡æ¶ï¼ç¨éé»å¡èµå¼ã
(3) ç¨alwayså建ç«ç»åé»è¾æ¨¡åæ¶ï¼ç¨é»å¡èµå¼ã
(4) å¨åä¸ä¸ªalwaysåä¸å»ºç«æ¶åºåç»åé»è¾çµè·¯æ¶ï¼ç¨éé»å¡èµå¼ã
(5) å¨åä¸ä¸ªalwaysåä¸ä¸è¦æ¢ç¨éé»å¡èµå¼åç¨é»å¡èµå¼ã
(6) ä¸è¦å¨ä¸ä¸ªä»¥ä¸çalwaysåä¸ä¸ºåä¸ä¸ªåéèµå¼ã
(7) ç¨$strobeç³»ç»ä»»å¡æ¥æ¾ç¤ºç¨éé»å¡èµå¼çåéå¼ã
(8) å¨èµå¼æ¶ä¸è¦ä½¿ç¨#0延æ¶ã
å¨ç¼åæ¶ç¢è®°è¿å
«ä¸ªè¦ç¹å¯ä»¥ä¸ºç»å¤§å¤æ°çVerilogç¨æ·è§£å³å¨ç»¼åå仿çä¸åºç°ç90-100% çåé©ç«äºé®é¢ã
3.æè°é»å¡çæ¦å¿µæ¯æå¨åä¸ä¸ªalwaysåä¸ï¼å
¶åé¢çèµå¼è¯å¥ä»æ¦å¿µä¸æ¯å¨åä¸æ¡èµå¼è¯å¥ç»æåå¼å§èµå¼çã
4.éé»å¡è¯å¥çæ§è¡è¿ç¨æ¯ï¼é¦å
计ç®è¯å¥åå
é¨ææå³è¾¹è¡¨è¾¾å¼(RHS)çå¼ï¼ç¶åå®æ对左边å¯åå¨åéçèµå¼æä½ã
5.å¨ä»£ç ä¸çåºå«ï¼
begin
B=A;
C=B+1;
end
ä¸è¿°ä»£ç å
å°Açå¼èµå¼ç»Bï¼Cçå¼æ¯A+1ï¼
begin
B<=A;
C<=B+1;
end
ä¸è¿°ä»£ç çæç»ç»ææ¯ï¼å°Aèµå¼ç»äºBï¼ä½æ¯Cçå¼æ¯Båæ¥çå¼+1ãå 为æå
计æ¯çæ¯å³è¾¹ç表达å¼ã
ç»åé»è¾çµè·¯ä¸æ¶åºé»è¾çµè·¯ï¼
1.æ°åçµè·¯æ ¹æ®é»è¾åè½çä¸åç¹ç¹ï¼å¯ä»¥åæ两大类ï¼ä¸ç±»å«ç»åé»è¾çµè·¯ï¼ç®ç§°ç»åçµè·¯ï¼ï¼å¦ä¸ç±»å«åæ¶åºé»è¾çµè·¯ï¼ç®ç§°æ¶åºçµè·¯ï¼ã
2.ç»åé»è¾çµè·¯å¨é»è¾åè½ä¸çç¹ç¹æ¯ä»»ææ¶å»çè¾åºä»
ä»
åå³äºè¯¥æ¶å»çè¾å
¥ï¼ä¸çµè·¯åæ¥çç¶ææ å
³ã
3.æ¶åºé»è¾çµè·¯å¨é»è¾åè½ä¸çç¹ç¹æ¯ä»»ææ¶å»çè¾åºä¸ä»
åå³äºå½æ¶çè¾å
¥ä¿¡å·ï¼èä¸è¿åå³äºçµè·¯åæ¥çç¶æï¼æè
说ï¼è¿ä¸ä»¥åçè¾å
¥æå
³ã
Verilog代ç ï¼
moduleblocking(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("Blocking: a = %d, b= %d, c = %d.", a, b, c);
end
endmodule
对åºåçå¾ï¼
modulenon_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("Non_Blocking: a =%d, b = %d, c = %d.", a, b, c);
end
endmodule
对åºåçå¾ï¼
æµè¯ä»£ç ï¼
`timescale1ns/1ns
moduleblocking_test;
wire [3:0] b1, c1, b2, c2;
reg [3:0] a;
reg clk;
initial begin
clk = 0;
forever #50 clk = ~clk;
end
initial begin
a = 4'h3;
$display("______________________");
#100 a = 4'h7;
$display("______________________");
#100 a = 4'hf;
$display("______________________");
#100 a = 4'ha;
$display("______________________");
#100 a = 4'h2;
$display("______________________");
#100$display("______________________");
$stop;
end
non_blocking u1(clk, a, b2, c2);
blocking u2(clk,a, b1, c1);
endmodule
温馨提示:答案为网友推荐,仅供参考