二、电路设计(语法)
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类型的信号,不一定产生寄存器!!!!!