昆明网站快速优化排名,自己学习做网站6,wordpress文章前台看不到,凡科网模板HDL#xff1a;硬件描述语言#xff0c;并发#xff0c;时序RTL#xff1a;寄存器传输级语言 Verilog和VHDL的区别#xff1a;VHDL侧重于系统级描述——系统级设计人员所采用#xff0c;Verilog侧重于模块行为的抽象描述——电路级设计人员
前端#xff1a;系统级、算法…HDL硬件描述语言并发时序RTL寄存器传输级语言 Verilog和VHDL的区别VHDL侧重于系统级描述——系统级设计人员所采用Verilog侧重于模块行为的抽象描述——电路级设计人员
前端系统级、算法级c/matlab、寄存器变换级RTL Verilog/SV 后端逻辑门级、开关级、物理版图级
数字电路设计两个要素线wire和器件module
RTL基本单元寄存器、ALU、MUX等 电路的功能描述算法状态机图、有限状态机、数据流图、控制流图
除endmodule、begin_end、fork_join外都要加分号 标识符只可以由字母、数字、下划线和$组成开头必须是字母或下划线是区分大小写的
数据类型
Verilog HDL19种中4个最基本的数据类型Integer型32位有符号整数、parameter符号常量、reg型、wire型
常量
整数型常量位宽进制数字 数字缺省十进制32位
wire[31:0]a;//长度为32 wire[31] a;//长度为31不建议
x表示不定值z表示高阻值 最左边的x或z具有扩展性8’bx1 8’bxxxxxxx1 是z的另一种表示符号在case语句中使用
负数在位宽前加一个减号 -8’d5 8’b1111_1011//5的补数反码加1
parameter常量的声明module test # (parameter p4’h1) localparam和parameter的区别parameter可做传递参数的接口
常用的三种变量线网型寄存器型数组
线网型nets型输出始终随输入的变化而变化的变量wire不能存值 表示以assign语句赋值的组合逻辑 缺省为wire型位宽1bit
寄存器型register型表示过程块initial always task function语句内的指定信号过程块中信号必须为reg型 reg生成触发器和组合逻辑wire只能生成组合逻辑
数组型memory型reg[n-1]存储器名[m-1;0];//m个位宽为n的存储单元 需指明赋值的存储单元rega[7:0]0;//不合法 rega[7]0;//合法
运算符
算术运算符双目运算符%取余两侧均为整型结果为第一个操作数的符号位某一个为不定值x结果为x 关系运算法双目运算符结果是逻辑值0、1、x优先级低于算术运算符 逻辑运算符 ||(a3’bx0x b3’bx01) (x 1) x非的优先级最高 位运算符~按位取反 | ^ ~/~同或进行运算时位数少的高位自动补0 缩减运算符单目运算符 ~ | ~| ^ ~^,低位与第二位进行运算直至最高位结果缩减为1位二进制数 eg.b|a; 移位运算符用0补空位左移扩充位数乘以2n右移数据丢失除以2n 位拼接符{1’b0xx……}{4{w}}{w,w,w,w},拼接时必须指明信号的位数,1默认为32位 等式运算符逐位相等结果为1某些位为x或z结果为x ! 和!(case等式运算符相应位完全一致结果为)xx;//x xx;//1 条件运算符三目运算符信号a?表达式1:表达式2;
运算符的优先级 连续赋值语句
assign语句描述组合逻辑最常用的方法不可出现在过程块中并行的与位置顺序无关与过程语句之间也是并行的
结构语句 不可综合的用在测试语句中
过程语句
always不断重复执行直到仿真结束initial只执行一次 always块中被赋值的只能是reg型不加时序控制会导致仿真死锁eg.always areg~areg always(*)电平触发组合逻辑 如a0等语句只能写在assignalwaysinitial赋值语句中三者并行
块语句
begin_end
顺序执行语句每条语句的延迟时间是相对于前一条语句的仿真时间而言的 begin:块名 块内声明语句 语句 end 存在块内声明语句参数声明reg变量声明integer变量声明real变量声明语句时要加上块名
fork_join
并行执行语句不可综合用在测试文件中时间排序在最后的语句执行结束或完成一个disable语句
条件语句
if-else语句
if(a)≠if(a1)//当a为单比特时成立
case语句
每个值的位宽 必须相等与控制表达式的位宽相同 在分支表达式中表示高阻态 按顺序判断满足一个条件后执行就跳出case语句故少用casex
casez不匹配高阻态z的位 casex不匹配高阻态z和不定值x的位 组合电路设计中不加上else、default项会生成隐含锁存器latchq保持原值加上后会生成选择器故组合逻辑中必须要加上else、default项
循环语句
for语句
for循环变量赋初值循环执行条件循环变量增值执行语句
repeat语句
repeat循环次数表达式语句
while语句
while循环执行条件表达式执行语句 执行语句中必须有一条改变循环执行条件表达式的语句
forever语句
无条件连续执行forever后面的语句或语句块 必须要写在initial过程块中不可综合用在测试文件中 使用时块要加块名然后用disable加块名跳出循环
编译预处理语句
宏定义语句define 标志符即宏名 字符串即宏内容//没有分号 define IN abcd 使用方法IN
文件包含语句include “文件名或文件绝对路径或相对编译文件的路径”//include后面一定要有空格
时间尺度语句timescale
系统任务语句
显示和写任务
$display(“a is %b”,a)二进制显示空位会显示零十进制会空出位数%0b显示实际位数自动换行 w r i t e 不会自动换行 write不会自动换行 %c或%CASCII字符%s或%S字符串%t或%T当前时间格式%t, write不会自动换行time 可以直接使用 t i m e time timedisplay($time,“%d”,a);//没有指定时间格式按十进制显示 \n换行\t制表符\字符\
监控任务
$monitor连续监控指定的参数参数发生变化打印 $monitoroff停止 $monitoron启动
文件输出任务从文本文件中读取数据并将数据加载到存储器中
$readmemb读取二进制格式数 r e a d m e m h 十六进制格式 readmemh十六进制 格式 readmemh十六进制格式readmemb(“数据文件名”,存储器名,起始地址,结束地址);//没有起始和结束地址则存储器从其最低位开始加载数据直到最高位
仿真时间函数
$time $realtime 不同之处返回64位整型时间/返回实型时间带有小数
随机函数random伪随机
randKaTeX parse error: Expected }, got EOF at end of input: …//-59~59 rand{rand}%60//0~59
仿真控制任务
$finish建议使用 $stop(只是暂停仿真)
阻塞赋值与非阻塞赋值
阻塞赋值立即改变可综合的阻塞赋值操作不能设定有延迟即使是零延迟延迟后才赋值不可综合 非阻塞赋值在块语句结束后才赋值只能对寄存器变量进行赋值故只能用在initial和always块等过程块中非阻塞赋值不允许用于连续赋值 always块建立组合逻辑模型时用阻塞赋值 同一个always块中建立时序和组合逻辑电路时用非阻塞赋值不要混用 赋值时不要使用#0延迟
任务和函数语句
task语句
任务定义task任务名; 端口及数据类型声明语句;//不用声明数据类型sv中默认为logic 其他语句 endtask 任务调用任务名(端口1,端口2……);//端口一一对应
多输入多输出 可包含定时控制语句 包含定时控制语句的任务是不可综合的# wait 任务的定义与调用必须在一个module中 可调用函数和任务函数 在任务定义结构内不能出现initial和always过程块 任务调用语句只能出现在过程块内
function语句
函数定义function返回值位宽或类型说明函数名;//缺省返回1位reg型数据 端口声明;//至少一个输入参量无输出不可有输出或双向变量 局部变量定义; 其他语句;//必须有一条赋值语句 endfunction 函数调用函数名(端口) 函数在模块内部定义通常在本模块中调用也可以从其他模块调用 不可包含定时控制语句可综合每调用一次函数相当于改变此电路的输入得到相应计算结果 可调用函数语句不可任务函数
模块的调用
端口可以位置关联或名称关联
仿真前RTL仿真逻辑网表仿真门级仿真和布线后仿真
tb文件中端口与输入端口连接为reg型输出端口连接为wire型
inclule xxx.v timescale 1ns/1ps 可不写files.f和Makefile文件已完成
时钟激励的产生
reg clk;
initial beginclk0;
end
always #10 clk~clk;always begin#10 clk0;#10 clk1;
endinitial beginclk0;forever #20 clk~clk;
end参数传递
module Decoder(A,F); parameter W1; parameter P1; …… 调用Decode #(4,0) u_D2(a,b);//位置关联 Decode #(.W(4),.P(0)) u_D2(a,b);//位置关联
悬空端口
输入管脚悬空为高阻z输出管脚悬空管脚废弃不用
VCS仿真mux2to1
源文件和tb文件代码tb文件中输入为wire型输出为reg型 将源文件、tb文件、Makefile、files.f放入一个mux2to1文件夹进入文件夹运行make all
跑eda工具执行命令make all要和Makefile文件同级 点击向下小箭头显示波形