第一篇:verilog語法學(xué)習(xí)心得(寫寫幫推薦)
這是我在查verilog的有符號數(shù)和無符號數(shù)時看到的,覺得很好,轉(zhuǎn)載于此,共同學(xué)習(xí)
-----------------------------verilog語法學(xué)習(xí)心得
1.數(shù)字電路基礎(chǔ)知識: 布爾代數(shù)、門級電路的內(nèi)部晶體管結(jié)構(gòu)、組合邏輯電路分析與設(shè)計、觸發(fā)器、時序邏輯電路分析與設(shè)計
2.數(shù)字系統(tǒng)的構(gòu)成: 傳感器
AD 數(shù)字處理器
DA 執(zhí)行部件
3.程序通在硬件上的執(zhí)行過程:
C語言(經(jīng)過編譯)-->該處理器的機(jī)器語言(放入存儲器)-->按時鐘的節(jié)拍,逐條取出指令、分析指令、執(zhí)行指令
4.DSP處理是個廣泛概念,統(tǒng)指在數(shù)字系統(tǒng)中做的變換(DFT)、濾波、編碼解碼、加密解密、壓縮解壓等處理
5.數(shù)字處理器包括兩部分:高速數(shù)據(jù)通道接口邏輯、高速算法電路邏輯
6.當(dāng)前,IC產(chǎn)業(yè)包括IC制造和IC設(shè)計兩部分,IC設(shè)計技術(shù)發(fā)展速度高于IC設(shè)計
7.FPGA設(shè)計的前續(xù)課程:數(shù)值分析、DSP、C語言、算法與數(shù)據(jù)結(jié)構(gòu)、數(shù)字電路、HDL語言 計算機(jī)微體系結(jié)構(gòu)
8.數(shù)字處理器處理性能的提高:軟件算法的優(yōu)化、微體系結(jié)構(gòu)的優(yōu)化
9.數(shù)字系統(tǒng)的實現(xiàn)方式:
編寫C程序,然后用編譯工具得到通用微處理器的機(jī)器指令代碼,在通用微處理器上運行(如8051/ARM/PENTUIM)
專用DSP硬件處理器
用FPGA硬件邏輯實現(xiàn)算法,但性能不如ASIC
用ASIC實現(xiàn),經(jīng)費充足、大批量的情況下使用,因為投片成本高、周期長
10.FPGA設(shè)計方法: IP核重用、并行設(shè)計、層次化模塊化設(shè)計、top-down思想
FPGA設(shè)計分工:前端邏輯設(shè)計、后端電路實現(xiàn)、仿真驗證
11.matlab的應(yīng)用:
matlab中有許多現(xiàn)成的數(shù)學(xué)函數(shù)可以利用,節(jié)省了復(fù)雜函數(shù)的編寫時間
matlab可以與C程序接口
做算法仿真和驗證時能很快生成有用的數(shù)據(jù)文件和表格
DSP builder可以直接將simulink模型轉(zhuǎn)換成HDL代碼,跳過了中間的C語言改寫步驟 12.常規(guī)從算法到硬件電路的開發(fā)過程:
算法的開發(fā)
C語言的功能描述
并行結(jié)構(gòu)的C語言改寫
verilog的改寫
仿真、驗證、修正
綜合、布局布線、投入實用
13.C語言改寫成verilog代碼的困難點:
并行C語言的改寫,因為C本身是順序執(zhí)行,而不是并行執(zhí)行
不使用C語言中的復(fù)雜數(shù)據(jù)結(jié)構(gòu),如指針
目前有將C語言轉(zhuǎn)換成verilog的工具?
14.HDL
HDL描述方法是從電路圖描述方法演化來的,相比來說更容易修改
符合IEEE標(biāo)準(zhǔn)的有verilog HDL和VHDL
VHDL由美國國防部開發(fā),有1987和1993兩個版本
verilog由cadence持有,有1995、2001、2005三個版本
verilog較VHDL更有前景:具有模擬電路描述能力、不僅可以開發(fā)電路還可以驗證電路、門級以下描述比VHDL強(qiáng)
RTL級和門級的綜合已經(jīng)成熟,主要是注意行為級的綜合結(jié)果,使用可綜合的編程風(fēng)格
SYSTEM VERILOG是VERILOG的一種延伸
15.IP核的應(yīng)用:
軟核soft core: 功能經(jīng)過驗證的、可綜合的、實現(xiàn)后門數(shù)在5K以上的HDL代碼
固核firm core: 功能經(jīng)過驗證的、可綜合的、實現(xiàn)后門數(shù)在5K以上的電路結(jié)構(gòu)編碼文件,如edif,不可更改
硬核hard core: 功能經(jīng)過驗證的、可綜合的、實現(xiàn)后門數(shù)在5K以上的電路結(jié)構(gòu)版圖,已帶工藝參數(shù),不可更改
16.HDL語言綜合后得到EDIF,這是一種標(biāo)準(zhǔn)電路網(wǎng)表
EDIF經(jīng)過具體工藝庫匹配、布局布線、延時計算后得到網(wǎng)表
EDIF不可更改,作為固核存在
17.verilog特點:
區(qū)分大小寫,所有關(guān)鍵字都要求小寫
不是強(qiáng)類型語言,不同類型數(shù)據(jù)之間可以賦值和運算
//是單行注釋
可以跨行注釋
描述風(fēng)格有系統(tǒng)級描述、行為級描述、RTL級描述、門級描述,其中RTL級和門級別與具體電路結(jié)構(gòu)有關(guān),行為級描述要遵守可綜合原則
門級描述使用門級模型或者用戶自定義模型UDP來代替具體基本元件,在IDE中針對不同F(xiàn)PGA器件已經(jīng)有對應(yīng)的基本元件原語
18.verlog語法要點:
module endmodule之間由兩部分構(gòu)成:接口描述和邏輯功能描述
IO端口種類: input output inout
相同位寬的輸入輸出信號可以一起聲明,input[3:0] a,b;不同位寬的必須分開寫
內(nèi)部信號為reg類型,內(nèi)部信號信號的狀態(tài): 0 1 x
z,3'bx1=3'bxx1 x/z會往左擴(kuò)展
3'b1=3'b001 數(shù)字不往左擴(kuò)展
邏輯功能描述中常用assign描述組合邏輯電路,always既可以描述組合邏輯電路又可以描述時序邏輯電路,還可以用元件調(diào)用方法描述邏輯功能
always之間、assign之間、實例引用之間以及它們之間都是并行執(zhí)行,always內(nèi)部是順序執(zhí)行
常量格式: <+/-><二進(jìn)制位寬><'><進(jìn)制><該進(jìn)制的數(shù)值>:
默認(rèn)進(jìn)制為10進(jìn)制
默認(rèn)位寬為32位
位寬是從二進(jìn)制寬度角度而言的
由位寬決定從低位截取二進(jìn)制數(shù)2'hFF=2'b11,通常由被賦值的reg變量位寬決定
parameter常用于定義延遲和變量位寬,可用常量或常量表達(dá)式定義
變量種類: wire reg memory
IO信號默認(rèn)為wire類型,除非指定為reg類型
wire可以用作任何輸入輸出端口
wire包括input output inout
wire不帶寄存功能
assign賦值語句中,被賦值的信號都是wire類型
assign之所以稱為連續(xù)賦值,是因為不斷檢測表達(dá)式的變化
reg類型可以被賦值后再使用,而不是向wire一樣只能輸出,類似VHDL中的buffer端口
reg類型變量初始值為x(VHDL中初始值為本類型最小值,通常是0)
always模塊里被賦值的信號都必須定義為reg類型,因為always可以反復(fù)執(zhí)行,而reg表示信號的寄存,可以保留上次執(zhí)行的值
reg類型變量與integer變量不同,即使賦負(fù)值,實質(zhì)上也是按二進(jìn)制無符號數(shù)存儲的,integer是有符號數(shù)
verilog中所有內(nèi)部信號都是靜態(tài)變量,因為它們的值都在reg中存儲起來了
memory型只有一維數(shù)組,由reg型變量組成
memory初始化只能按地址賦值,不能一次性賦值
1*256的memory寫法: reg mema[255:0]
mema[3]=0;
不同位寬的變量之間賦值,處理之前都以被賦值的變量位寬為準(zhǔn)擴(kuò)展或截取
A[a:b] 無論a b誰大,a總是實際電路的信號高位,b總是實際電路的信號低位
算術(shù)運算中如果有X值則結(jié)果為X
for循環(huán)中的變量另外定義成integer,因為它不是實際信號,有正負(fù);reg則以無符號數(shù)存在
== 和!=只比較0、1,遇到z或x時結(jié)果都為x(x在if中算做假條件),結(jié)果可能是1、0、x
===和!==比較更加苛刻,包括x和z的精確比較,結(jié)果可能是0、1
&&的結(jié)果只有1'b1或1'b0兩種,A&A的結(jié)果位寬則是與A相同的{1,0}為 64'h100000000,所以拼接運算中各信號一定要指定位寬
移位運算左移將保留 4'b1000<<1等于5'b10000,右移則舍棄 4'b0011等于4'b0001
數(shù)字電路里位運算應(yīng)用普遍,包括按位邏輯運算、移位運算、拼接運算、縮減運算
非阻塞式賦值<=與阻塞式賦值=
阻塞:在同一個always過程中,后面的賦值語句要等待前一個賦值語句執(zhí)行完,后面的語句被該賦值語句阻塞
非阻塞:在同一個always過程中,非阻塞賦值語句是同時進(jìn)行的,排在后面的語句不會被該賦值語句阻塞
<=:
塊結(jié)束后才能完成賦值
塊內(nèi)所有<=語句在always塊結(jié)束時刻同時賦值
<=右邊各變量的值是上一次時鐘邊沿時,這些變量當(dāng)時的值
用于描述可綜合的時序電路
=:
=語句結(jié)束之后過程always才可能結(jié)束
在always過程中,begin end塊內(nèi)按先后順序立即賦值,在fork join內(nèi)同時賦值(可能造成沖突)
與assign連用描述組合電路
begin end中阻塞的含義:begin...@(A)B=C...;end
如果A事件不發(fā)生則永遠(yuǎn)不能執(zhí)行下去,被阻塞了
由于時鐘的延時(往往在ps級),多個always(posedge)之間究竟誰先執(zhí)行是個未知數(shù)
使用原則:同一個always過程塊內(nèi)建立時序電路用<=
純組合邏輯電路用=,生成的電路結(jié)構(gòu)最簡單,執(zhí)行速度最快
同一個always塊內(nèi)不要混用<=和=
不要在多個always塊內(nèi)對同一個變量賦值(多源驅(qū)動)
if else的三種形式,第三種形式適合描述優(yōu)先編碼器
if條件中0/x/z當(dāng)成假,1當(dāng)成真,非0的數(shù)值也當(dāng)成真
case語句的三種: case(四種狀態(tài)的比較)casez(忽略z)casex(忽略x和z,只看哪些位的信號有用)
case語句中所有表達(dá)式值的位寬必須相等,default中不能將n'bx用'bx代替
避免生成鎖存器的方法: 電平觸發(fā)時if后加else
case中加default
?
使用casex會將不必要的狀態(tài)視為無關(guān)項,使得綜合出來的電路最簡單
兩種特殊的括號: begin 順序語句...end
fork 并行語句...join,其差別在于塊內(nèi)語句的起止時間、執(zhí)行順序、相對延時
塊被命名后,其內(nèi)部變量可以被調(diào)用,因為變量都是靜態(tài)的(調(diào)用信號:對應(yīng)電路中的一個信號線被引到另一處)
initial塊只無條件執(zhí)行一次
always塊在滿足條件時不斷執(zhí)行
initial常用來寫測試文件,always塊常用來寫電路描述
always既可以描述組合邏輯電路又可以描述時序邏輯電路
always如果后面有敏感信號列表則不能用wait語句
always既可以描述電平觸發(fā)又可以描述邊沿觸發(fā),wait只能描述電平觸發(fā)
assign常用于描述組合邏輯電路
測試文件中一般都是現(xiàn)initial 后always
生成語句:生成快的本質(zhì)是使用循環(huán)內(nèi)的一條語句代替多條重復(fù)的verilog語句,簡化了用戶的編程
genvar用于聲明生成變量,生成變量只能用在生成快之間
仿真時,仿真器會將生成塊中的代碼展平,在確立后的方針代碼中,生成變量是不存在的
最好是先想象出來循環(huán)生成語句被展平后的電路樣子,再寫相關(guān)的描述語句
task和function的區(qū)別:
task可以定義自己的仿真時間單位,function與主模塊共用同一個仿真時間單位
函數(shù)不能啟動任務(wù),任務(wù)能夠啟動函數(shù)
函數(shù)至少要有一個輸入變量,任務(wù)沒有輸入變量
函數(shù)返回一個值,任務(wù)不返回值
一個模塊的設(shè)計包括3個部分: 電路模塊的設(shè)計
測試模塊的設(shè)計
設(shè)計文檔的編寫
設(shè)計者通過布局布線工具生成具有布線延遲的電路,再進(jìn)行后仿真,得到時序分析報告
從時序分析報告中可以知道電路的實際延遲t,同步電路內(nèi)每個時鐘周期要大于t,從而可確定該運算邏輯的最高頻率
綜合器之所以能夠?qū)崿F(xiàn)加法器、乘法器是因為庫中已經(jīng)存在可配置的參數(shù)化器件模型
FPGA內(nèi)總線寬度容易自定義,以便實現(xiàn)高速數(shù)據(jù)流,三態(tài)數(shù)據(jù)總線相當(dāng)于數(shù)據(jù)流的控制閥門
數(shù)字系統(tǒng)內(nèi)數(shù)據(jù)流的控制: 開關(guān)(或三態(tài)數(shù)據(jù)總線)、數(shù)據(jù)暫存部件(寄存器)、同步狀態(tài)機(jī)控制(整個系統(tǒng)在一個時鐘域內(nèi))
流水線操作pipe line:
K級流水線就是從組合邏輯的輸入到輸出恰好有K個寄存器組,上一級的輸出是下一級的輸入
流水線操作獲得第一個結(jié)果的時間要比不用流水線操作的時間長,但以后結(jié)果獲得時間都只需要一個時鐘周期,提高了數(shù)據(jù)吞吐量
流水線操作的保證:Tclk>K*(組合邏輯延遲+觸發(fā)器的建立保持時間/觸發(fā)時間),即時間片段要長于最大路徑延遲
體現(xiàn)了面積換速度的思想,在綜合時考慮的是以面積小為主還是以速度為主
本質(zhì)上是一種同步邏輯
同步時序邏輯和異步時序邏輯:
同步時序邏輯指所有寄存器組由唯一時鐘觸發(fā)
always@(posedge clk)或always@(negedage clk)
異步時序邏輯指觸發(fā)條件不唯一,任意一個條件都會引起觸發(fā)
always@(posedge clk or posedage reset)
目前的綜合器是以同步時序邏輯綜合的,因為同步時序邏輯較異步時序邏輯可靠
嚴(yán)格的同步要求時鐘信號傳遞速度遠(yuǎn)遠(yuǎn)大于各部分的延遲,實際中clk要單獨用線,而不要經(jīng)過反相器等部件
always @(posedge..)begin...<=...end 表示同步時序邏輯(同時刻賦值)
不同速率數(shù)據(jù)接口的處理方法(異步數(shù)據(jù)的處理方法):幀同步
FIFO 雙端口RAM
同步狀態(tài)機(jī):
包括moore和mealy型兩種,及其反饋模型(是一種反饋控制系統(tǒng),當(dāng)前狀態(tài)就是其內(nèi)部狀態(tài)變量)
狀態(tài)機(jī)的開發(fā)步驟:
根據(jù)實際問題列出輸入輸出變量和狀態(tài)數(shù)
畫出狀態(tài)圖并化簡
寫出狀態(tài)轉(zhuǎn)移真值表得到邏輯表達(dá)式
用D觸發(fā)器或JK觸發(fā)器構(gòu)建電路(目前用D觸發(fā)器多)
verilog描述時只需要得到簡化的狀態(tài)圖就可以描述
狀態(tài)編碼方式: 獨熱碼
格雷碼
狀態(tài)機(jī)主體程序有單always描述方式和多always描述方式
采用case/casez/casex建立模型最好,因為x是無關(guān)態(tài),生成的電路最簡單
default: state='bx與實際情況更一致,效果等同于 default: state<=idle
只有同步狀態(tài)機(jī)才能被目前的綜合for語句會將所有變量的情況展開,占用巨量邏輯資源,替代辦法是用計數(shù)器和case語句說明所有情況
有優(yōu)先級的if else結(jié)構(gòu)會消耗更多資源,建議用無優(yōu)先級的case替代 模塊的復(fù)用往往比代碼上修改節(jié)省的資源多 PLL的分頻、倍頻、移相操作會增加設(shè)計精度
同步時序電路的延時:#x通常用于仿真測試,實際硬件延時是:長延遲用計數(shù)器,小延遲用D觸發(fā)器,此方法用來取代延遲鏈
同步電路中,穩(wěn)定的數(shù)據(jù)采用必須滿足采樣寄存器的建立和保持時間 reg類型在always中不一定綜合成時序電路,也可能是組合邏輯電路 乒乓操作與作用
異步時鐘域同步問題 延遲包括門延遲和線延遲
組合邏輯產(chǎn)生的時鐘僅能應(yīng)用在時鐘頻率較低、精度要求不高的情況下 增減敏感信號得到的結(jié)果一樣
補充部分:
verilog HDL起初是作為寫testbench而產(chǎn)生的 verilog 有1995進(jìn)入IEEE標(biāo)準(zhǔn),為IEEE-1364, 于2001年進(jìn)行了擴(kuò)展,為IEEE 1364-2001; verilog AMS可用于模擬電路和數(shù)字電路的綜合,目前正在不斷發(fā)展和完善中; verilog的標(biāo)識符區(qū)分大小寫,關(guān)鍵字使用小寫; 用來進(jìn)行單行注釋,用* *來進(jìn)行跨行注釋;
標(biāo)識符由字母、數(shù)字、下劃線構(gòu)成,并以字母開頭; 關(guān)鍵字又叫保留字,只有小寫的關(guān)鍵字才是保留字;
信號的狀態(tài)有4種: 0 1 x z x和z在描述電路時不區(qū)分大小寫,在仿真時大小寫有不同意義;
常量表達(dá)式中: x z不區(qū)分大小寫;
進(jìn)制符號h o d b與H O D B不區(qū)分大小寫; 十六進(jìn)制中a~f不區(qū)分大小寫; 下劃線_用于提高可讀性; ?在數(shù)中可以代替z; x和z的左端補位;
字符和字符串都以ASICII碼形式存在,也可以當(dāng)成電路內(nèi)的信號; 字符串必須包含在同一行,不能分成多行書寫;
如果表達(dá)式或者賦值語句中將字符串當(dāng)成操作數(shù),則字符串中的每個字符都被看成8位的ASCII值序列;
可綜合的信號類型:wire reg memory 它們用來描述數(shù)字電路
不可綜合的數(shù)據(jù)類型:integer real 它們只用仿真,位于testbench中
wire是連線的抽象模型,不能保存數(shù)據(jù),其值由驅(qū)動元的值決定; wire不能用在always或initial塊中; wire的默認(rèn)值為高阻z;
wire的使用情形: 1.作為模塊的輸出端口
2.用連續(xù)賦值語句assign賦值; reg是1位寄存器(觸發(fā)器)的抽象模型,可以保存數(shù)據(jù); reg必須用在always或initial塊中; reg的默認(rèn)值為x;
reg的使用情形:1.阻塞賦值<= 2.非阻塞賦值= memory只能是一維的;
memory只能對每個單元分別初始化,方法:1.一個一個賦值
2.通過系統(tǒng)任務(wù)$readmem賦值
reg[3:0] fc;//一個4位寄存器
reg fc[3:0] //4個一位寄存器
parameter的作用:仿真開始以前對其進(jìn)行賦值,整個仿真過程中保持其值不變;
關(guān)系運算符將以邏輯1或邏輯0返回比較的結(jié)果;
==!=的返回值有0 1 x三種情況,===!==的返回值只有0 1兩種情況;
verilog由于是描述電路的,用于位的操作較多,有: 位邏輯操作,移位操作,并置操作,歸約操作; 位邏輯運算的結(jié)果中,位數(shù)與原操作數(shù)一樣多;
歸約符是在原操作數(shù)的所有位上進(jìn)行操作,并產(chǎn)生1位結(jié)果;
并置運算可以發(fā)生在bit與bit之間 bit與矢量之間 矢量與矢量之間
用于仿真的系統(tǒng)任務(wù):
所有系統(tǒng)任務(wù)都必須在initial或always內(nèi); 所有系統(tǒng)任務(wù)都必須以$開頭; 常見系統(tǒng)任務(wù):
顯示任務(wù)($diplay系列和$write系列)
監(jiān)控任務(wù)($monitor系列)
探測任務(wù)($strobe系列)
文件打開、輸入、關(guān)閉任務(wù)(&fopen &fclose &fdisplay...)
讀取文件任務(wù)($readmemb $readmemh)
仿真結(jié)束控制任務(wù)($finish $stop)
隨即信號任務(wù)($random)
過程塊: initial塊和always塊
一個module內(nèi)可以包含多個initial或always模塊;
所有initial或always塊在0時刻開始并行執(zhí)行,各initial或always塊內(nèi)部順序執(zhí)行; initial過程塊主要是面向testbench的,通常不具有可綜合性;
always過程塊在描述電路時既可以描述組合邏輯電路(電平敏感)又可以描述時序邏輯電路(邊沿敏感);
寫testbench時initial通常用于初始化以及順序波形的描述,always通常用于重復(fù)波形的描述;
任務(wù)task與函數(shù)function: 為了描述模塊中被多次執(zhí)行的部分以及為了增強(qiáng)代碼的易讀性 verilog中的高級程序語句如for循環(huán)語句只用在寫testbench中; begin end和fork join是兩種特殊的括號
if語句的第三種形式適合描述優(yōu)先編碼器,case語句適合描述數(shù)據(jù)選擇器和狀態(tài)機(jī);
case的條件表達(dá)式如果與分支項表達(dá)式長度不同,則在比較前將所有表達(dá)式都統(tǒng)一為這些表達(dá)式的最長長度;
casez忽略z,casex忽略z和x;
assign語句只在右端表達(dá)式發(fā)生變化時才重新計算并重新賦值,其余時間都是連續(xù)賦值; assign語句可以指定bit、vector或是任意拼接操作的結(jié)果;
assign語句是連續(xù)賦值的,用于驅(qū)動網(wǎng)線wire,reg類型不需要連續(xù)賦值,reg類型一旦被賦值就會一直保存;
過程賦值語句有兩種:阻塞式=和非阻塞式<=,只能在過程塊initial和always中使用; @對事件觸發(fā)的控制與wait語句不能同時使用;
第二篇:Verilog學(xué)習(xí)心得
Verilog學(xué)習(xí)心得
因為Verilog是一種硬件描述語言,所以在寫Verilog語言時,首先要有所要寫的module在硬件上如何實現(xiàn)的概念,而不是去想編譯器如何去解釋這個module.比如在決定是否使用reg定義時,要問問自己物理上是不是真正存在這個register, 如果是,它的clock是什么? D端是什么?Q端是什么?有沒有清零和置位?同步還是異步?再比如上面討論的三態(tài)輸出問題,首先想到的應(yīng)該是在register的輸出后面加一個三態(tài)門,而不是如何才能讓編譯器知道要“賦值”給一個信號為三態(tài)。同樣,Verilog中沒有“編譯”的概念,而只有綜合的概念。
寫硬件描述語言的目的是為了綜合,所以說要想寫的好就要對綜合器有很深的了解,這樣寫出來的代碼才有效率。
曾經(jīng)接觸過motorola蘇州設(shè)計中心的一位資深工程師,他忠告了一句:就是用verilog描述電路的時候,一定要清楚它實現(xiàn)的電路,很多人只顧學(xué)習(xí)verilog語言,而不熟悉它實現(xiàn)的電路,這是設(shè)計不出好的電路來的.一般寫verilog code時,對整個硬件的結(jié)構(gòu)應(yīng)該是很清楚了,最好有詳細(xì)的電路圖畫出,時序問題等都應(yīng)該考慮清楚了??梢钥粗鴪D直接寫code。
要知道,最初Verilog是為了實現(xiàn)仿真而發(fā)明的.不可綜合的Verilog語句也是很重要的.因為在實際設(shè)計電路時,除了要實現(xiàn)一個可綜合的module外,你還要知道它的外圍電路是怎樣的,以及我的這個電路與這些外圍電路能否協(xié)調(diào)工作.這些外圍電路就可以用不可綜合的語句來實現(xiàn)而不必管它是如何實現(xiàn)的.因為它們可能已經(jīng)實際存在了,我僅是用它來模擬的.所以,在寫verilog的時候應(yīng)該要先明確我是用它來仿真的還是綜合的.要是用來綜合的話,就必須要嚴(yán)格地使用可綜合的語句,而且不同的寫法可能產(chǎn)生的電路會有很大差別,這時就要懂一些verilog綜合方法的知識.就像前面說的,腦子里要有一個硬件的概念.特別是當(dāng)綜合報錯時,就要想一想我這種寫法能不能用硬件來實現(xiàn),verilog畢竟還不是C,很多寫法是不可實現(xiàn)的.要是這個module僅是用來仿真的,就要靈活得多了,這時你大可不必太在意硬件實現(xiàn).只要滿足它的語法,實現(xiàn)你要的功能就行了.有網(wǎng)友說關(guān)于#10 clk=~clk的問題,雖然這種語句是不可綜合的,但是在做simulation和verification是常常用它在testbench中來產(chǎn)生一個clock信號。再比如常常用到的大容量memory, 一般是不會在片上實現(xiàn)的,這個時候也需要一個unsynthesizable module.mengxy所言切中肯罄。
我們設(shè)計的module的目的是為了可以綜合出功能正確,符合標(biāo)準(zhǔn)的電路來。我想這是個反復(fù)的過程,就像我們在寫design flow中總要注明前仿真,綜合后的仿真,以及后仿真等。仿真是用來驗證我們的設(shè)計的非常重要的手段。而verilog里那些看是無聊的語句這個時候就會發(fā)揮很大的作用。我想,用過verilog_xl的兄弟應(yīng)該深有體會。verilog_xl里的操作,可以用verilog里的系統(tǒng)命令來完成。通過最近的應(yīng)聘我也深有體會,很多公司看中你在寫code時,是否考慮到timing, architecture,DFT等,這也說明verilog中的任何語句都非常重要的。要寫代碼前必須對具體的硬件有一個比較清晰的概念但是想一次完成可綜合代碼就太夸張了,verilog的自頂向下設(shè)計方法就是從行為建模開始的,功能驗證了以后再轉(zhuǎn)向可綜合模型.太在意與可綜合令初期設(shè)計變得太累
很同意這種看法,在做邏輯結(jié)構(gòu)設(shè)計時,綜合的因素是要考慮的,但是有很多東西不能考慮的過于細(xì)致,就是在設(shè)計的時候不能過于緊卡時延,面積等因素,因為這樣以來綜合后優(yōu)化的余量就會很小,反而不利與設(shè)計的優(yōu)化,如果在時延和面積要求不是很緊張的情況下,其實代碼寫的行為級,利用綜合工具進(jìn)行優(yōu)化也是一種方法。偶就聽說有一家很有名的公司,非常相信綜合工具的優(yōu)化能力,從來不作綜合后仿真的,hehe.當(dāng)然,如果面積和時延的要求很高,最好還是把代碼寫的底層一點,調(diào)用庫單元時,也要充分考慮其面積和時延的因素。
Verilog與C++的類比
1.Verilog中的module對應(yīng)C++中的class。它們都可以實例化。例如可以寫一個FullAdder module,表示全加器這種器件。module FullAdder(a, b, cin, sum, cout);input a, b, cin;output sum, cout;
assign {cout, sum} = a + b + cin;endmodule
然后在執(zhí)行8-bit補碼加減運算的ALU module中實例化8個FullAdder,表示ALU用到了8個FullAdder。
module ALU(a, b, result, cout, is_add);input[7:0] a, b;input is_add;output[7:0] result;output cout;
wire[7:0] b_not = ~b;wire[7:0] b_in = is_add ? b : b_not;wire[7:0] carry;
assign carry[0] = is_add ? 1'b0 : 1'b1;
// module 實例化
// 8-bit ripple adder FullAdder fa0(a[0], b_in[0], carry[0], result[0], carry[1]);FullAdder fa1(a[1], b_in[1], carry[1], result[1], carry[2]);FullAdder fa2(a[2], b_in[2], carry[2], result[2], carry[3]);FullAdder fa3(a[3], b_in[3], carry[3], result[3], carry[4]);FullAdder fa4(a[4], b_in[4], carry[4], result[4], carry[5]);FullAdder fa5(a[5], b_in[5], carry[5], result[5], carry[6]);FullAdder fa6(a[6], b_in[6], carry[6], result[6], carry[7]);FullAdder fa7(a[7], b_in[7], carry[7], result[7], cout);endmodule
對應(yīng)在C++中先寫FullAdder class,然后在ALU class中以FullAdder作為data member。
class FullAdder { };
class ALU { FullAdder fa[8];};另外一點,moudle聲明port的方式,像是從早期C語言的函數(shù)定義中學(xué)來的:
char* strcpy(dst, src)char* dst;char* src;{ //...}
2.Verilog中的模塊調(diào)用時,指定端口可以使用名稱綁定。C++在調(diào)用函數(shù)時,參數(shù)只能按順序書寫。例如memset()的原型是:
void *memset(void *s, int c, size_t n);
如果你想將某個buf清零,應(yīng)該這么寫: char buf[256];memset(buf, 0, sizeof(buf));
但是如果你不小心寫成了: memset(buf, sizeof(buf), 0);
編譯器不會報錯,但運行的實際效果是根本沒有對buf清零。(記得Richard Stevens的書里提到過這一點。)
在Verilog中,如果要寫一個測試ALU的module,那么其中對ALU實例化的指令可以這么寫:
module alu_test;reg[8:0] a_in, b_in;reg op_in;wire[7:0] result_out;wire carry_out;
ALU alu0(.a(a_in[7:0]),.b(b_in[7:0]),.is_add(op_in),.result(result_out),.cout(carry_out));//...endmodule 這樣就比較容易檢查接線錯誤。
另外,在C++中,如果所有參數(shù)類型不同,而且之間沒有隱式類型轉(zhuǎn)換,那么可以利用C++的強(qiáng)類型機(jī)制在編譯期檢查出這種調(diào)用錯誤。
3.Verilog中把大括弧{}用作bit的并置,因此語句塊要用begin/end標(biāo)示。Verilog中小括號()和中括號[]的作用與C++中類似,前者用于函數(shù)或模塊調(diào)用,后者用于下標(biāo)索引。我想如果Verilog把尖括號<>用作bit并置的話,就能把大括號{}解放出來,用作標(biāo)示語句塊,這樣寫起來更舒服一些。
4.Verilog本質(zhì)上是測試驅(qū)動開發(fā)的。對于每個module都應(yīng)該有對應(yīng)的test bench(或稱test fixture)。比較好的情況是,一個工程師寫module,另一個工程師寫對應(yīng)的testbench,這樣很容易檢查出對電路功能需求理解不一致的地方。因此還可以說Verilog主張結(jié)對編程(pair programming)。例如對前面的ALU module的test bench可以寫成: `timescale 1ns / 1ns module alu_test;
reg[8:0] a_in, b_in;reg op_in;
wire[7:0] result_out;wire carry_out;
ALU alu0(.a(a_in[7:0]),.b(b_in[7:0]),.is_add(op_in),.result(result_out),.cout(carry_out));
reg[9:0] get, expected;reg has_error;
initial begin has_error = 1'b0;
op_in = 1'b1;// test addition
for(a_in = 9'b0;a_in!= 256;a_in = a_in + 1)for(b_in = 9'b0;b_in!= 256;b_in = b_in + 1)begin #1;get = {carry_out, result_out};expected = a_in + b_in;if(get!== expected)begin $display(“a_in = %d, b_in = %d, expected %d, get %d”,a_in, b_in, expected, get);has_error = 1'b1;end end
op_in = 1'b0;// test subtraction //...if(has_error === 1'b0)begin $display(“ALL TESTS PASSED!”);end $finish;end endmodule
5.Verilog比起VHDL的不足之處在于,它只能定義concrete class,不能定義abstract class。也就是說interface和implementation不能分離。這在設(shè)計大型電路時就顯得表現(xiàn)力不足。不過這關(guān)系不大,因為可以在編譯時選擇同一模塊的不同實現(xiàn)版本,間接實現(xiàn)了接口與實現(xiàn)的分離。
在VHDL中,強(qiáng)制將接口與實現(xiàn)分離。對每個模塊,你都得先寫接口(定義輸入輸出信號),即ENTITY;然后至少寫一份實現(xiàn),即ARCHITECTURE。每個ENTITY可以有不止一份實現(xiàn),例如可以有行為描述的,也有數(shù)據(jù)流描述的。然后在配置文件中選擇該ENTITY到底用哪一份實現(xiàn)。舉例來說(選自《VHDL入門·解惑·經(jīng)典實例·經(jīng)驗總結(jié)》一書),分頻器模塊可以這么寫,先定義其接口FreqDevider,然后定義兩份實現(xiàn)Behavior和Dataflow:
LIBRARY IEEE;USE IEEE.Std_Logic_1164.All;
ENTITY FreqDevider IS PORT(Clock : IN Std_Logic;Clkout : OUT Std_Logic);END;
ARCHITECTURE Behavior OF FreqDevider IS SIGNAL Clk : Std_Logic;BEGIN PROCESS(Clock)BEGIN IF rising_edge(Clock)THEN Clk <= NOT Clk;END IF;END PROCESS;Clkout <= Clk;END;
ARCHITECTURE Dataflow OF FreqDevider IS--signal declarations BEGIN--processes END;在C++中,既可以寫concrete class,也可以寫abstract class。比Verilog和VHDL都方便。
6.Verilog和VHDL都有模板的概念,Verilog稱為參數(shù)(parameter),VHDL稱為類屬(generic)。不過好像都只能用整數(shù)作為模板參數(shù),不能像C++那樣用類型作為模板參數(shù)。
7.目前來看,Verilog是硬件描述語言,不是硬件設(shè)計語言。在用Verilog設(shè)計電路的時候,我們是把腦子中想好的電路用Verilog“描述”出來:哪里是寄存器、哪里是組合邏輯、數(shù)據(jù)通路是怎樣、流水線如何運作等等都要在腦子里有清晰的映象。然后用RTL代碼寫出來,經(jīng)過綜合器綜合出的電路與大腦中的設(shè)想相比八九不離十。這就像說C語言是可移植的匯編語言,以前好的C程序員在寫代碼的時候,能夠知道每條語句背后對應(yīng)的匯編代碼是什么。verilog設(shè)計經(jīng)驗點滴 1,敏感變量的描述完備性
Verilog中,用always塊設(shè)計組合邏輯電路時,在賦值表達(dá)式右端參與賦值的所有信號都必須在always @(敏感電平列表)中列出,always中if語句的判斷表達(dá)式必須在敏感電平列表中列出。如果在賦值表達(dá)式右端引用了敏感電平列表中沒有列出的信號,在綜合時將會為沒有列出的信號隱含地產(chǎn)生一個透明鎖存器。這是因為該信號的變化不會立刻引起所賦值的變化,而必須等到敏感電平列表中的某一個信號變化時,它的作用才表現(xiàn)出來,即相當(dāng)于存在一個透明鎖存器,把該信號的變化暫存起來,待敏感電平列表中的某一個信號變化時再起作用,純組合邏輯電路不可能作到這一點。綜合器會發(fā)出警告。Example1: input a,b,c;reg e,d;always @(a or b or c)
begin
e=d&a&b;/*d沒有在敏感電平列表中,d變化時e不會立刻變化,直到a,b,c中某一個變化*/
d=e |c;
end
Example2: input a,b,c;reg e,d;always @(a or b or c or d)
begin
e=d&a&b;/*d在敏感電平列表中,d變化時e立刻變化*/
d=e |c;
end
2, 條件的描述完備性
如果if語句和case語句的條件描述不完備,也會造成不必要的鎖存器。Example1: if(a==1'b1)q=1'b1;//如果a==1'b0,q=? q將保持原值不變,生成鎖存器!
Example2: if(a==1'b1)q=1'b1;else
q=1'b0;//q有明確的值。不會生成鎖存器!Example3: reg[1:0] a,q;....case(a)
2'b00 : q=2'b00;
2'b01 : q=2'b11;//如果a==2'b10或a==2'b11,q=? q將保持原值不變,鎖存器!
endcase Example4: reg[1:0] a,q;....case(a)
2'b00 : q=2'b00;
2'b01 : q=2'b11;
default: q=2'b00;//q有明確的值。不會生成鎖存器!
endcase
Verilog中端口的描述
1,端口的位寬最好定義在I/O說明中,不要放在數(shù)據(jù)類型定義中; Example1: module test(addr,read,write,datain,dataout)
input[7:0] datain;input[15:0] addr;input
read,write;
output[7:0] dataout;//要這樣定義端口的位寬!
wire addr,read,write,datain;
reg dataout;
Example2: module test(addr,read,write,datain,dataout)input datain,addr,read,write;output dataout;wire[15:0] addr;wire[7:0] datain;wire
read,write;reg[7:0] dataout;// 不要這樣定義端口的位寬!
2,端口的I/O與數(shù)據(jù)類型的關(guān)系:
端口的I/O
端 口 的 數(shù) 據(jù) 類 型
module內(nèi)部 module外部
input
wire wire或reg
output
wire或reg
wire
inout
wire
wire
3,assign語句的左端變量必須是wire;直接用“=”給變量賦值時左端變量必須是reg!Example: assign a=b;//a必須被定義為wire!******** begin a=b;//a必須被定義為reg!end
VHDL 中 STD_LOGIC_VECTOR 和 INTEGER 的區(qū)別
例如 A 是INTEGER型,范圍從0到255;B是STD_LOGIC_VECTOR,定義為8位。A累加到255時,再加1就一直保持255不變,不會自動反轉(zhuǎn)到0,除非令其為0;而B累加到255時,再加1就會自動反轉(zhuǎn)到0。所以在使用時要特別注意!
以觸發(fā)器為例說明描述的規(guī)范性 1,無置位/清零的時序邏輯
always @(posedge CLK)
begin
Q<=D;
end
2,有異步置位/清零的時序邏輯
異步置位/清零是與時鐘無關(guān)的,當(dāng)異步置位/清零信號到來時,觸發(fā)器的輸出立即被置為1或0,不需要等到時鐘沿到來才置位/清零。所以,必須要把置位/清零信號列入always塊的事件控制表達(dá)式。
always @(posedge CLK or negedge RESET)
begin
if(!RESET)
Q=0;
else
Q<=D;
end
3,有同步置位/清零的時序邏輯
同步置位/清零是指只有在時鐘的有效跳變時刻置位/清零,才能使觸發(fā)器的輸出分別轉(zhuǎn)換為1或0。所以,不要把置位/清零信號列入always塊的事件控制表達(dá)式。但是必須在always塊中首先檢查置位/清零信號的電平。
always @(posedge CLK)
begin
if(!RESET)
Q=0;
else
Q<=D;
end
結(jié)構(gòu)規(guī)范性
在整個芯片設(shè)計項目中,行為設(shè)計和結(jié)構(gòu)設(shè)計的編碼是最重要的一個步驟。它對邏輯綜合和布線結(jié)果、時序測定、校驗?zāi)芰?、測試能力甚至產(chǎn)品支持都有重要的影響??紤]到仿真器和真實的邏輯電路之間的差異,為了有效的進(jìn)行仿真測試: 1,避免使用內(nèi)部生成的時鐘
內(nèi)部生成的時鐘稱為門生時鐘(gated clock)。如果外部輸入時鐘和門生時鐘同時驅(qū)動,則不可避免的兩者的步調(diào)不一致,造成邏輯混亂。而且,門生時鐘將會增加測試的難度和時間。
2,絕對避免使用內(nèi)部生成的異步置位/清零信號
內(nèi)部生成的置位/清零信號會引起測試問題。使某些輸出信號被置位或清零,無法正常測試。
3,避免使用鎖存器
鎖存器可能引起測試問題。對于測試向量自動生成(ATPG),為了使掃描進(jìn)行,鎖存器需要置為透明模式(transparent mode),反過來,測試鎖存器需要構(gòu)造特定的向量,這可非同一般。
4,時序過程要有明確的復(fù)位值
使觸發(fā)器帶有復(fù)位端,在制造測試、ATPG以及模擬初始化時,可以對整個電路進(jìn)行快速復(fù)位。
5,避免模塊內(nèi)的三態(tài)/雙向
內(nèi)部三態(tài)信號在制造測試和邏輯綜合過程中難于處理.補充不知你看了verilog 2001版本嗎?現(xiàn)在的verilog在盡量往C語言的風(fēng)格上靠攏。
1。敏感變量的描述完備性,我現(xiàn)在用always實現(xiàn)組合邏輯時,都是寫成always@(*),這樣很很好,自動把所有右端賦值信號加入。
2。module編寫時這樣更好: module(input [23:0] rx_data , //CRC_chk interface
output reg
CRC_en ,output reg
CRC_init , input
CRC_err);
第三篇:語法學(xué)習(xí)心得
語法學(xué)習(xí)心得
語法,是語言中的詞、短語、句子的構(gòu)造規(guī)律。西方傳統(tǒng)語言學(xué)認(rèn)為,語法包括兩個大的方面:詞法和句法。也正由于漢語的詞的分類定性
都必須依靠特定的句法環(huán)境來實現(xiàn),所以,漢語語法有關(guān)詞類問題的討論總是要放到句法當(dāng)中去進(jìn)行。
研究語法的學(xué)科叫做語法學(xué),語法學(xué)分很多類,1宏觀研究方法。2研究對象的時限。3研究者的社會目的。4研究者的教育目的。5對象范。
語法系統(tǒng)分為客觀語法系統(tǒng)和主觀語法系統(tǒng),一種語言只有一個客觀的語法系統(tǒng),它是客觀存在于語言當(dāng)中的。但一種語言的表述系統(tǒng)卻可以
有幾個。造成表述系統(tǒng)多樣化的原因有兩個:一是語法學(xué)研究的對象自身是復(fù)雜的,要全面把握并做出科學(xué)、合理的解釋并不是容易的事情。
二是語法學(xué)家的研究方法、角度、能力以及占有的材料、觀察問題的方法、能力等等,都不盡相同,所以,盡管面對的是同樣的研究對象,也 可能得出完全不同的或者不很相近的結(jié)論來。
語法有其作用,首先,從說和寫的角度來看,語法規(guī)定著人們怎樣用詞造句。比如,漢語的“我看書”從排列的角度來看,可有六種順序:我
看書、書我看、我書看、看我書、書看我、看我書。其次,從聽、讀、寫的角度來看,語法指示人們怎正確理解漢語的意義。如:①
人類需要動物。動物需要人類。② 這本書看了三天。這本書看了三天了。兩個例子都說明語法規(guī)則對于句子語義內(nèi)容的影響。
我們不難發(fā)現(xiàn)漢語語法的幾個顯著特點(1)短語和句子的基本構(gòu)造方式一致。
漢語的短語和句子大都是由以下幾種構(gòu)造方式構(gòu)造而成的:
結(jié)構(gòu)方式 短語 句子
主謂結(jié)構(gòu) 我寫 花紅 燈亮 我寫了?;t了。燈亮
動賓結(jié)構(gòu)學(xué)漢語 寫信 吃飯來人!抓住他!請用飯。
偏正結(jié)構(gòu)大人 高舉 我的書 你的票!快跑!高點舉!
聯(lián)合結(jié)構(gòu)讀寫 高大 我和你你和她?
中補結(jié)構(gòu)抬高 說清楚 放好說清楚!干得非常非常好。
這一點給我們的啟示是:分析句
子的方法和分析短語的方法基本一致。漢語句子的結(jié)構(gòu)可以以短語為基礎(chǔ),弄清短語的結(jié)構(gòu)模式,就可以
基本上把握句子的結(jié)構(gòu)模式。因
為短語比句子簡短,影響結(jié)構(gòu)構(gòu)造、分析的因素少。以此為基礎(chǔ),把握漢
語句子的結(jié)構(gòu)模式,可以收到以簡馭繁的效果。
(2)詞類和句子成分之間不存在簡單的、一一對應(yīng)關(guān)系。
由上邊所說的漢語語法有關(guān)詞類問題的討論總是要放到句法當(dāng)中去進(jìn)行,現(xiàn)在來說說我感興趣的分析句子成分部分。
句子,是具有特定語調(diào),能表達(dá)一個相對完整意思的語言單位。所謂“句子成分”,說的是根據(jù)句子內(nèi)部組成成分
之間的不同的組合關(guān)系,以及各自語法職能劃分而來的 句子的結(jié)構(gòu)成分。如主語、謂語等等。分析句子的兩種方法
(一)句子成分分析法。句子成分分析法,是傳統(tǒng)的分析句子的方法,它把句
子成分分別為主、謂、賓、定、狀、補等六類,然后按照這些成分的搭配情況來說明句子的各種結(jié)構(gòu)格局。由此可以看到句子成分有如下特點:
其一,句子成分是句子分析的結(jié)果。
句子成分是通過對句子進(jìn)行語法結(jié)構(gòu)的分析得到的,應(yīng)該是先有句子,而后得到句子成分。
其二,句子成分具有特定的語法職能或“身份” 特征。比如: 通過上邊的分析可以得到以下幾組句子結(jié)構(gòu)成分 這也就是所謂的漢語“十大句子成分”:主語、謂 語、動語、賓語、中心語、修飾語、定語、狀語、補 語、獨立語。
關(guān)于語法學(xué)習(xí)的心得就簡單說到這吧,這一學(xué)期的學(xué)習(xí)懂得了很多語法的基本知識,也有了一定對語法的思辨能力了。
第四篇:關(guān)于語法的學(xué)習(xí)心得
關(guān)于語法的學(xué)習(xí)心得
山西省永濟(jì)中學(xué)王碧霞
英語學(xué)習(xí)過程中最重要的一個環(huán)節(jié)就是關(guān)于語法的掌握,不管是單選題,還是完型填空,以及閱讀理解,都會涉及不是的語法知識,而如果我們不能熟練掌握這部分內(nèi)容的話,勢必造成總體成績不佳的結(jié)果。語法教學(xué)能讓學(xué)生對英語語言規(guī)則有明確系統(tǒng)的認(rèn)識,有利于幫助學(xué)生建立起語言規(guī)范。不過我們在語法教學(xué)中要特別注意,我們教給學(xué)生英語語法,不是為了培養(yǎng)他們用語法分析英語語言的能力,語法教學(xué)是為培養(yǎng)學(xué)生運用英語的能力服務(wù)的,語法教學(xué)從屬于運用英語的能力的培養(yǎng)。下面就我本人在教學(xué)一線的一線工作經(jīng)驗對語法學(xué)習(xí)方法總結(jié)如下:。
1、總體把握語法大綱
就像剛接觸英語單詞一樣,我們得知道英語單詞都是由26個字母組成的,并且一開始就得不斷積累我們的單詞量。同樣語法的學(xué)習(xí)也需要先進(jìn)行大體把握,再讓學(xué)生在較短時間內(nèi)迅速掌握英語基礎(chǔ)語法知識。這種語法教學(xué)方法需要學(xué)生具有比較強(qiáng)烈的語法學(xué)習(xí)興趣和比較頑強(qiáng)的語法學(xué)習(xí)毅力,同時需要學(xué)生具有比較強(qiáng)的集中注意力的能力。這種語法教學(xué)方法在期末復(fù)習(xí)和畢業(yè)復(fù)習(xí)時應(yīng)該對學(xué)生有一定幫助,但在學(xué)生學(xué)習(xí)開始時使用可能增強(qiáng)學(xué)生學(xué)習(xí)英語的焦慮感,嚴(yán)重的可能導(dǎo)致學(xué)生形成英語學(xué)習(xí)的心理障礙。
這種方法將語法知識學(xué)習(xí)與課文學(xué)習(xí)長時間分開,如果將一學(xué)期的語法知識在學(xué)期開始時集中教學(xué),那么本學(xué)期最后一個單元才會學(xué)到的語法知識就可能出現(xiàn)語法知識學(xué)習(xí)與課文學(xué)習(xí)分離一個學(xué)期之長,這可能影響學(xué)生準(zhǔn)確掌握語法知識的運用。這種方法同時將語法知識和語法知識的運用長時間分開,不利于學(xué)生學(xué)習(xí)掌握運用語法知識的真實語境及其真實的語用功能。
語法集中教學(xué)能有效幫助學(xué)生比較系統(tǒng)地學(xué)習(xí)語法知識,而且可以幫助學(xué)生對容易混淆的語法知識進(jìn)行比較,如能合理使用,是可以幫助我們提高教學(xué)質(zhì)量和教學(xué)效率的,但如果使用不當(dāng),則可以反而增加教學(xué)難度,影響教學(xué)質(zhì)量和教學(xué)效率,影響學(xué)生形成獲得運用英語的能力。同時,在運用集中方法時,如何集中,集中哪些語法知識,語法知識的集中講授與語法知識的運用能力培養(yǎng)怎樣有機(jī)合理地結(jié)合起來,都是應(yīng)該思考的問題。盲目集中可能不利于老師們所任教班級的教學(xué)質(zhì)量和教學(xué)效率的提高。
2、善于總結(jié)歸納
歸納是從感性認(rèn)識到理性認(rèn)識的學(xué)習(xí)方法。歸納要求我們先給學(xué)生一些含有語法教學(xué)內(nèi)容的語言材料,讓學(xué)生在學(xué)習(xí)語言材料中接觸這些語法現(xiàn)象,然后引導(dǎo)學(xué)生從這些語言材料中歸納總結(jié)出語法規(guī)則。
歸納法能夠讓學(xué)生先獲得語言材料,從感性認(rèn)識中獲得理性認(rèn)識,有利于學(xué)生理解和掌握語法規(guī)則,但需要一定的教學(xué)時間,需要老師做比較多的語言材料的教學(xué)規(guī)則,而且在語言材料教學(xué)中需要從語境、語用進(jìn)行教學(xué),而不是直接從語法概念和語法規(guī)則進(jìn)行教學(xué)。
3、理性的歸納再應(yīng)用于實踐
應(yīng)用是從已經(jīng)形成的概念出發(fā),直接將概念講授給學(xué)生,然后再用例句和語言材料來說明概念。
這種方法讓學(xué)生首先接觸語法規(guī)則,可以避免出現(xiàn)規(guī)則誤差,但演繹法過于理性,需要學(xué)生具有比較強(qiáng)的抽象思維能力,強(qiáng)烈的學(xué)習(xí)興趣和一定的學(xué)習(xí)毅力。?
總結(jié)與應(yīng)用相比,總結(jié)更有利于減輕學(xué)生學(xué)習(xí)負(fù)擔(dān),降低學(xué)生學(xué)習(xí)困難,弱化學(xué)生學(xué)習(xí)焦慮,應(yīng)用更有利于縮短學(xué)生學(xué)習(xí)時間,減少學(xué)生學(xué)習(xí)錯誤。歸納法更利于學(xué)生的學(xué)習(xí),演繹法更利于教師的教學(xué)。
所以剛接觸英語時一定要注意不斷總結(jié),當(dāng)我們具備一定基礎(chǔ)后可以將總結(jié)的理論再推廣應(yīng)用到學(xué)習(xí)過程。不過老師們?nèi)匀粦?yīng)該根據(jù)自己任教班級的動態(tài)真實的教育因素和教學(xué)因素選擇教學(xué)方法。
4、參考科學(xué)實驗中的對照原則
學(xué)習(xí)過程中經(jīng)常會遇到容易混淆的語法知道,這時我們不防把這兩個內(nèi)容放在一塊進(jìn)行對較,多看兩遍就會發(fā)現(xiàn)它們之間總會有這樣那樣的區(qū)別,這里所謂比較包括兩個方面:一是對英語語法本身中的相似但不同的英語語言現(xiàn)象進(jìn)行比較,如一般現(xiàn)在時與現(xiàn)在進(jìn)行時的比較,一般過去時與現(xiàn)在完成時的比較,形容詞性物主代詞與名詞性物主代詞的比較等等;二是對英語和漢語兩種語言中的相關(guān)的語法現(xiàn)象和結(jié)構(gòu)規(guī)則的比較。
比較的語法教學(xué)可以在學(xué)過可比較的一種語法現(xiàn)象之后,學(xué)習(xí)另一種語法現(xiàn)象之時,就兩種語法現(xiàn)象進(jìn)行比較,如學(xué)過形容詞性物主代詞之后,在學(xué)習(xí)名詞性物主代詞之時,就已經(jīng)學(xué)過的形容詞性物主代詞與名詞性物主代詞進(jìn)行比較,來幫助學(xué)生學(xué)習(xí)掌握名詞性物主代詞。
比較的語法教學(xué)也可以用在語法總結(jié)復(fù)習(xí)之時,比如學(xué)習(xí)了五種動詞基本時態(tài)之后,就五種時態(tài)在用法、語義、語用等方面的區(qū)別進(jìn)行比較,以幫助學(xué)生鞏固掌握。復(fù)習(xí)時,比較方法的語法教學(xué)應(yīng)該是在足夠真實的語言環(huán)境中運用語言的比較,而不是單純的語法概念、術(shù)語的比較。
5、更為具體直觀的語法學(xué)習(xí)方法
表格能夠很明確地對語法知識進(jìn)行比較和歸類,因此經(jīng)常出現(xiàn)在語法知識教學(xué)中,甚至有的語法書都是有表格形式編寫的。
由于表格強(qiáng)調(diào)內(nèi)容的一致性,因此表格只能列舉英語語法知識的基本內(nèi)容,對于比較特別的不一致的內(nèi)容往往列舉有些困難,同時語法知識的運用比較難以列舉。
很多老師運用圖畫進(jìn)行英語語法知識教學(xué),因為圖畫形象直觀,能讓學(xué)生很容易地掌握教學(xué)內(nèi)容,經(jīng)常取得比較好的教學(xué)效果。
不過圖畫只能用于一部分英語語法知識的教學(xué),比如方位介詞、副詞的教學(xué),時態(tài)的教學(xué)等。
6、利用現(xiàn)代化的多媒體技術(shù)
圖片與視頻是人類學(xué)習(xí)過程中更容易接受的一種信息,這里同樣可以應(yīng)用于我們的英語學(xué)習(xí)過程中,在一些計算機(jī)輔助教學(xué)軟件中經(jīng)常使用計算機(jī)動畫進(jìn)行語法教學(xué)。計算機(jī)動畫具有很強(qiáng)的動感,而且動畫本身也很受學(xué)生歡迎,同時動畫能夠很明確地表現(xiàn)動作,并配有講解,因此這種形式很有生命力。
隨著計算機(jī)輔助英語教學(xué)的廣泛開展,計算機(jī)動畫形式的語法教學(xué)也會被廣泛使用。由于目前的大多數(shù)計算機(jī)教學(xué)軟件不是網(wǎng)絡(luò)化的,致使計算機(jī)動畫的語法教學(xué)還難以在學(xué)生之間進(jìn)行教學(xué)對比,從而在一定程度上影響計算機(jī)動畫的教學(xué)效果的發(fā)揮。
7、及時交流鞏固
無論采取什么樣的教學(xué)原則,語法知識都是必須要講授給學(xué)生的,只是講授的方法不同而已?,F(xiàn)在的新教材都強(qiáng)調(diào)對學(xué)生運用英語進(jìn)行交際的能力的培養(yǎng),對語法采取了暗線的教授方式,這對于每周只有在幾節(jié)英語課上才能進(jìn)入英語環(huán)境的中國學(xué)生來說,難度比較大。其實,必要的語法知識講解是不可避免的,關(guān)鍵是怎樣在語法教授中貫徹能力教育原則。
第五篇:verilog作業(yè)題
1、以結(jié)構(gòu)描述方式實現(xiàn)下列邏輯:
F=AB+ACD(CD的非)
2、以連續(xù)賦值語句設(shè)計8位總線驅(qū)動器。
3、以always語句設(shè)計8位總線驅(qū)動器。
4、以always語句設(shè)計8位雙向總線驅(qū)動器。
1、設(shè)計一個具有低電平使能端和高電平使能端的2-4譯碼器。
2、設(shè)計一個JK觸發(fā)器。
3、設(shè)計一個24分頻期,要求輸出信號占空比為1:1。
4、一個掛在總線上的16位寄存器。
5、設(shè)計一個8位線編碼器,輸入為D7 - D0,D7優(yōu)先級最高,D0最低。當(dāng)Di為高電平輸入時,F(xiàn)=1,OUT為其編碼,否則F=0。
1、以結(jié)構(gòu)描述方式實現(xiàn)下列邏輯:
Y=ABC(BC的非)+DE+ CFG(CFG的非)
2、試設(shè)計一個具有使能端ncs的2-4譯碼器。
3、試設(shè)計一個4位加減運算器,輸入為A、B、CIN、M,輸出為OUT和COUT。當(dāng)M=0時執(zhí)行加法運算,M=1時,執(zhí)行減法運算。
4、試設(shè)計一個14分頻器,要求占空比1:1。
5、試設(shè)計一個具有三態(tài)輸出緩沖的8位數(shù)據(jù)寄存器。
6、試設(shè)計一個具有清0和置數(shù)功能的8位二進(jìn)制加1計數(shù)器。
7、設(shè)計一個16位移位寄存器。
8、設(shè)計一個16位雙向移位寄存器,當(dāng)d=0時右移, d=1時左移。
1設(shè)中斷請求有效電平為高電平,中斷請求輸入線INTR0—INTR15中INTR15優(yōu)先權(quán)最高。試設(shè)計一個中斷優(yōu)先權(quán)編碼器。當(dāng)有中斷請求時,INT=1,同時輸出中斷請求輸入線的編碼V;否則INT=0,V的輸出任意。
2試設(shè)計一個具有同步清0和同步置數(shù)功能的8位二進(jìn)制加1計數(shù)器。
3試設(shè)計一個“11010100”序列檢測器.4設(shè)計一個8位雙向移位寄存器。其I/O端口和控制端口包括d(移位方向控制,當(dāng)d=0時右移, d=1時左移)、數(shù)據(jù)串行輸入din、數(shù)據(jù)并行輸入data(8位)、dout數(shù)據(jù)串行輸出、數(shù)據(jù)并行輸出q(8位)、同步時鐘clk、并行置數(shù)load等。
5設(shè)計每周期8個采樣點的鋸齒波信號發(fā)生器。
6設(shè)計每周期8個采樣點的正弦波信號發(fā)生器。