前段时间自学了Verilog语言,故记录
CPLD语法学习语录
<1>assign用法
assign表示赋值操作,连续性,没有顺序性可言
a,b,c,d分别代表引脚高低电平
module block(a,b,c,d)
input a,b; a,b为输入
output c,d; c,d为输出
assign c= a | b; 连续赋值操作
assign d= a & b;
endmodule
<2>always用法
always表示触发条件,模块内部语句是顺序执行的
posedge 上升沿
posedge 下降沿
always @(posedge clk or posedge clr) /* clr clk 上升沿开始触发执行以下条件 */
begin
if(clr) q <= 0;
else if(en) q <= d;
end
<3>数据类型及其常亮、变量
基本的数据类型:reg型、wire型、integer型、parameter型
(1)数字
8’b10101100 位宽为8的数二进制表示
x代表不定值,z代表高阻值
4’b10x0 第二位表示位不定值
4’b101z 第一位表示位高阻值
parameter 参数型
parameter msb=7
(2)变量
wire型
wire [7:0] b; //定义了一个八位的wire型数据
reg型
reg [3:0] regb; //定义了一个四位的名为regb的reg型数据
wire对应于连续赋值,如assign
reg对应于过程赋值,如always,initia
memory型
reg [7:0] mema[10:0]; /* 数组mema */
(3)运算符及表达式
- 算术运算符(+,-,×,/,%)
- 赋值运算符(=,<=) 赋值运算都是等于,=:非阻塞赋值(立即赋值) <=:阻塞赋值(块语句执行完开始赋值)
- 关系运算符(>,<,>=,<=)
- 逻辑运算符(&&,||,!)
- 条件运算符(??
- 位运算符(,|,^,&,^)
- 移位运算符(<<,>>)
- 拼接运算符({ })
<4>块语句
顺序执行块
begin
*** /块语句执行/
end
<5>条件语句
if () ----
else if(表达式) —执行语句(也可以是执行块)
***
else if() —
case(rega)
x:—执行语句;
y:—执行语句;
default: —执行语句;
endcase