二、電路設計(語法)
1、設計不用的語法
a)initial【設計不用,仿真時用】
b)task/function【設計不用、仿真很少用】
c)for/while/repeat/forever【設計不用、仿真很少用】
d)integer【設計不用】
e)模塊內部最好不要有X態、Z態,內部不能有三態接口
f)casex/casez【設計和仿真都不用】
g)force/wait/fork【設計不用仿真很少用】
h)#10 【設計不用,仿真經常使用】
2、設計使用的語法
a)reg/wire/parameter
b)assign /always
c)if else 和case兩種條件語句使用
d)算數運算符(加減乘除余+ - * / %)【加減乘常用】
e)賦值運算符(= <=)【時序邏輯用非阻塞賦值,組合邏輯用阻塞賦值,其他情況不存在】
f)關系運算符(< > <= >=)
g)邏輯運算符(&& || !)【為了避免歧義,運算符兩側為1bit的信號】
h)位運算符(~ | ^ &)
i)移位運算符 (>> <<<)
j)拼接運算符( {} )
三、電路設計的結構
1)組合邏輯
always@(*)begin
//語句
end
2)時序邏輯
a)同步復位的時序電路
always@(posedge clk)begin
if(rst_n==1'b0)begin
//語句
end
else begin
//語句
end
end
b) 異步復位時序電路
always@(posedge clk or negedge rst_n)begin
if(rst_n==1'b0)begin
//語句
end
else begin
//語句
end
end
四、設計要點
1、一個always只產生一個信號,一個信號只在一個always中產生
always@(posedge clk or negedge rst_n)begin
if(rst_n==1'b0)begin
b<=0;
a<=0;
end
else begin
b<=1;
a<=1;
end
end
always@(posedge clk or negedge rst_n)begin
if(rst_n==1'b0)begin
b<=0;
end
else begin
b<=1;
end
end
always@(posedge clk or negedge rst_n)begin
if(rst_n==1'b0)begin
a<=0;
end
else begin
a<=1;
end
end
總結:仿真、調試 代碼的修改
1)always描述的是一個信號產生的全過程,即什么情況下這個值是多少,再其他情況下,這個值又是多少。
2)條件判斷只有if……else case……endcase 其他都不用
3)包含posedge 或者negedge的,一定是D觸發器,是時序電路
4)設計時,考慮 如果想立即產生結果 用組合邏輯 想延時一拍,用時序電路
總結:電路設計的語法 結構 要點
a) 三種電路
b) 兩種條件
c) 一一法則
參數化 和 例化
設計代碼信號類型的總結
1、 設計代碼僅僅使用reg和wire
2、 設計代碼中 :由本模塊產生且用always產生的信號,用reg
3、 在測試代碼中:用initial產生的信號,用reg類型
4、 其他用wire
5、 reg類型的信號,不一定產生寄存器!!!!!