这个网络上有很多申请license的方法和安装教程 如果嫌麻烦可以给我留言,给你发2018版的压缩包
是一种用于数字逻辑电路设计的硬件描述语言 使用verilogHDL可以像设计软件一样设计硬件系统。(HDL:hardware description language 硬件描述语言)
常用关键字:and always assign case else end if initial inout input integer for module or output parameter posedge
标识符(类似c语言)
注释(类似c++)://单行注释 /*多 行 注释 */
数字的写法:
书写格式: <位数>’ <进制>数字进制: 字母意义b二进制o八进制d十进制h十六进制 负数:在位数前加 “-”举例:3‘b101 3位 二进制 数值:5 储存:101特殊数字x z:x表示不定值,z表示高阻值常量、变量
常量 定义:在代码运行过程中,值不能改变的量,成为常量。数字(包括整数,x和z值,负数) 、 parame常量(或称为符号常量) 定义格式: parameter 变量名1 = 数字,变量名2 =数字, … ; 例子:parameter UP = 2’d0 ; 变量 wire型变量 格式:wire 变量名1,变量名2,…,变量名n ; wire[n-1:0] 变量名1,变量名2,… , 变量名m;(n是指位宽,数据宽度,共声明了m个变量,每个变量位宽为n)reg型变量(具有记忆功能,always块里给变量赋值,变量必须是reg型) 定义:在过程块中被赋值的信号,往往代表触发器,也可能是组合逻辑信号 格式: reg 数据名1 ,数据名2,… ,数据名n; reg[n-1:0] 数据名1,数据名2, … ,数据名m;memory型变量——reg数组 定义:由若干个相同宽度的reg型变量组成的数组。 可描述RAM、ROM和reg堆 格式:reg[n-1:0] 储存器名[m-1:0]; 例子: reg[7:0] RAM[63:0]; //声明储存器RAM RAM[10]= 8’d34; //访问第10个储存单元 其他变量:large型…运算符(八种)
算术运算符(+ - * / %)逻辑运算符(&& || !)位运算符(& | ~ ^ ^~ )关系运算符( < > >= <=)赋值运算符(<= =)移位运算符(<< >>)条件运算符(?:)位拼接运算符({}) reg[0:7] a_8, b_8; reg[0:15] a_1,b_16; always…begin a_16 = { a_8,b_8}; end优先级表达式
begin <语句> end 相当于C语言中的大括号
always块(有触发条件) always @ (敏感信号列表) <语句> - 例子:
(电平触发) always @ (a or b) //每当a或b的值变化时执行一遍块内语句 begin <语句> end (信号沿触发,只能一位) always @ (posedge clk) //每当时钟上升沿到来时执行一遍initial 块 (没触发条件,只在仿真零时刻执行一次) initial <语句>
一般用于测试激励文件 赋值语句(能在alway和initial块中使用) 不建议将一个reg变量分开赋值与assign的区别: assign是连续赋值,等号左右恒等,只能写在always外,左边是wire变量,与always块并发执行。赋值语句是在块内赋值,触发时,将等号右边的值赋给左边。写在alway块或者initial块中,左边是reg变量。 阻塞赋值:= 描述组合逻辑电路非阻塞赋值 <= 描述时序电路例子:一位全加器 module add1(a,b,cin,sum,cout) input a,b,cin; output sum,cout; wire q = a & b ; //内部变量 wire g = a ^ b ; assign sum = cin ^ g ; //连续赋值 assign cout = cin & g | q ; endmodule 条件语句(只能在always块中使用)多分支选择语句(只能在always块中使用) case(表达式) <分支一>:<语句> <分支二>:<语句> default:<语句> endcase 块语句:begin <语句> end