還是從李小龍說起。伴隨著一聲“喲嚯”,飛出一腳后張開雙臂身體半蹲的招牌式動作,被全球各地無數人模仿過。可是我們知道,全世界只有一個李小龍。無論你把“招式”模仿得多么惟妙惟肖,都無法達到那個效果。原因其實很簡單,我們不具備他的速度和力量。采用反推法逆向思維,如果具備了他的速度與力量,任何一個招式都會威力無窮。由此可知,基本功是多么重要。 前幾節的內容,我們講的是怎么“減負”,盡量卸下對于完成項目來說沒有必要的學習部分。本節內容要講的就是,對于核心知識點,必須下苦功完全掌握。 我們經常會遇到這樣的情況,“感覺”已經懂了,會了,但是一進入實際項目束手無策。為什么?這種情形,絕大部分時候,都是因為基本核心知識點還沒有完全學通,處于半懂不懂的狀態。例如: 搞不清楚 add_flag和sel_flag的區別 ,不清楚變量使用的條件,不清楚計數器需要用幾個已經計數器之間的關系。 那么對于核心知識點,應該達到什么樣的標準,才算是真正掌握了呢? 例 :當收到en1=1時,執行一下操作 a.間隔2個時鐘周期后,dout產生寬度為5的高電平脈沖,然后 b.間隔2個時鐘周期后,dout產生寬度為7的高電平脈沖,然后 c.間隔2個時鐘周期后,dout產生寬度為3的高電平脈沖,然后 d.間隔2個時鐘周期后,dout產生寬度為6的高電平脈沖。 當收到en2=1時,執行一下操作 a.間隔4個時鐘周期后,dout產生寬度為3的高電平脈沖,然后 b.間隔1個時鐘周期后,dout產生寬度為6的高電平脈沖,然后 c.間隔6個時鐘周期后,dout產生寬度為3的高電平脈沖,然后 d.間隔2個時鐘周期后,dout產生寬度為5的高電平脈沖。(答案如下) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 4142434445464748495051525354 555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 | always @(posedge clk or negedge rst_n)begin if(!rst_n)begin cnt0 <= 0; end else if(add_cnt0)begin if(end_cnt0) cnt0 <= 0; else cnt0 <= cnt0 + 1; end end assign add_cnt0 = add_flag ; assign end_cnt0 = add_cnt0 && cnt0==x-1 ; always @(posedge clk or negedge rst_n)begin if(!rst_n)begin cnt1 <= 0; end else if(add_cnt1)begin if(end_cnt1) cnt1 <= 0; else cnt1 <= cnt1 + 1; end end assign add_cnt1 = end_cnt0; assign end_cnt1 = add_cnt1 && cnt1==4-1 ; always @(posedge clk or negedge rst_n)begin if(rst_n==1'b0)begin dout <= 0; end else if(en_dout)begin dout <= 1; end else if(end_cnt0)begin dout <= 0; end end assign en_dout = add_cnt0 && cnt0 == y-1; always @(posedge clk or negedge rst_n)begin if(rst_n==1'b0)begin add_flag <= 0; end else if(en1||en2)begin add_flag <= 1; end else if(end_cnt1)begin add_flag <= 0; end end always @(posedge clk or negedge rst_n)begin if(rst_n==1'b0)begin sel_flag <= 0; end else if(en1)begin sel_flag <= 0; end else if(en2)begin sel_flag <= 1; end end always @(*)begin if(sel_flag==0)begin if(cnt==0)begin x = 7; y = 2; end else if (cnt1==1)begin x = 9; y = 2; end else if (cnt1==2)begin x = 5; y = 2; end else begin x = 8; y = 2; end end else begin if(cnt==0)begin x = 7; y = 4; end else if (cnt1==1)begin x = 7; y = 1; end else if (cnt1==2)begin x = 9; y = 6; end else begin x = 7; y = 2; end end end |
類似這些習題,一直要練習到不需要思考的過程,而是形成類似于條件反射式的自然反應。掌握的要領就是不停練習反復練習。在這一點上,沒有捷徑可走。唯一可依托的,就是——勤奮。 高深的內容都是由最基本的要素組合而成。一旦有了扎實的基本功底,就有了“李小龍的速度與力量”,很多“招式”方面的高深問題就迎刃而解了。 本節中我們通過借喻“功夫”,來說明基本功的重要性以及和高深內容的關系。
|