SOC原理及应用实验指导书修订 实验2.docx
- 文档编号:3526428
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:14
- 大小:755.20KB
SOC原理及应用实验指导书修订 实验2.docx
《SOC原理及应用实验指导书修订 实验2.docx》由会员分享,可在线阅读,更多相关《SOC原理及应用实验指导书修订 实验2.docx(14页珍藏版)》请在冰豆网上搜索。
SOC原理及应用实验指导书修订实验2
实验二复杂时序逻辑电路的设计
一、实验目的
1.掌握条件语句if…else在复杂时序逻辑设计中的应用;
2.掌握阻塞赋值与非阻塞赋值的概念和区别,掌握阻塞赋值的使用情况。
二、实验原理
1.条件语句在VerilogHDL中的使用
与常用的高级程序语言一样,为了描述较为复杂的时序关系,VerilogHDL提供了条件语句供分支判断时使用。
在可综合风格的VerilogHDL模型中常用的条件语句有if…else和case…endcase两种结构,用法和C程序语言中类似。
两者相较,if…else用于不很复杂的分支关系,实际编写可综合风格的模块、特别是用状态机构成的模块时,更常用的是case…endcase风格的代码。
2.设计时序逻辑时采用阻塞赋值与非阻塞赋值的区别
非阻塞赋值语句(<=)右端表达式计算完后并不立即赋值给左端,而是同时启动下一条语句继续执行,而阻塞赋值语句(=)在每个右端表达式计算完成后立即赋值给左端变量。
非阻塞赋值不能用于assign语句中,而只能用于对寄存器型变量进行赋值,只能在intial和always等过程过程块中。
阻塞赋值既能用于assign语句,也能用于intial和always等过程赋值中。
对于时序逻辑的描述和建模,应尽量使用非阻塞赋值方式。
若在同一个always过程块中描述时序和组合逻辑混合电路时也最好使用非阻塞赋值方式。
三、实验仪器
序号
名称
型号与规格
数量
备注
1
计算机系统(PC机)
Intel奔腾系列,1G内存
1
2
Quarues
6.0以上
1
四、实验内容
1.条件语句在VerilogHDL中的使用
条件语句示例:
可综合的分频器。
它的功能是将10M的时钟分频为500K的时钟。
基本原理与1/2分频器是一样的,但是需要定义一个计数器,以便准确获得1/20分频。
模块源代码:
//---------------fdivision.v-----------------------------
modulefdivision(RESET,F10M,F500K);
inputF10M,RESET;
outputF500K;
regF500K;
reg[7:
0]j;
always@(posedgeF10M)
if(!
RESET)//低电平复位。
begin
F500K<=0;
j<=0;
end
else
begin
if(j==19)//对计数器进行判断,以确定F500K信号是否反转。
begin
j<=0;
F500K<=~F500K;
end
else
j<=j+1;
end
endmodule
仿真波形:
2.设计时序逻辑时采用阻塞赋值与非阻塞赋值的区别
非阻塞赋值语句(<=)右端表达式计算完后并不立即赋值给左端,而是同时启动下一条语句继续执行,而阻塞赋值语句(=)在每个右端表达式计算完成后立即赋值给左端变量。
非阻塞赋值不能用于assign语句中,而只能用于对寄存器型变量进行赋值,只能在intial和always等过程过程块中。
阻塞赋值既能用于assign语句,也能用于intial和always等过程赋值中。
对于时序逻辑的描述和建模,应尽量使用非阻塞赋值方式。
若在同一个always过程块中描述时序和组合逻辑混合电路时也最好使用非阻塞赋值方式。
在always块中,阻塞赋值可以理解为赋值语句是顺序执行的,而非阻塞赋值可以理解为赋值语句是并发执行的。
实际的时序逻辑设计中,一般的情况下非阻塞赋值语句被更多地使用,有时为了在同一周期实现相互关联的操作,也使用了阻塞赋值语句。
可综合设计中阻塞赋值和非阻塞赋值设计要点:
1)非阻塞赋值不能用于assign持续赋值中,一般只出现在initial和always等过程块中,对reg型变量进行赋值;
2)当用always块来描述组合逻辑时,既可以用阻塞赋值,也可以用非阻塞赋值。
但在同一个过程块中,最好不要同时用阻塞赋值和非阻塞赋值;
3)在向函数funtion的返回值赋值时,应使用阻塞赋值;
4)不能在一个以上的always过程块中对同一个变量赋值,这样会引起冲突,在综合时会报错;
5)在一个模块中,严禁对同一个变量既进行阻塞赋值,又进行非阻塞赋值,这样会在综合时报错;
6)对时序逻辑的描述和建模,应尽量使用非阻塞赋值方式,此外,若在同一个always过程块中描述时序和组合逻辑混合电路时,最好使用非阻塞赋值方式。
阻塞赋值与非阻塞赋值示例:
分别采用阻塞赋值语句和非阻塞赋值语句的两个看上去非常相似的两个模块blocking.v和non_blocking.v来阐明两者之间的区别。
模块源代码:
//-------------blocking.v---------------
moduleblocking(clk,a,b,c);
output[3:
0]b,c;
input[3:
0]a;
inputclk;
reg[3:
0]b,c;
always@(posedgeclk)
begin
b=a;
c=b;
end
endmodule
//-------------non_blocking.v-------------------
modulenon_blocking(clk,a,b,c);
output[3:
0]b,c;
input[3:
0]a;
inputclk;
reg[3:
0]b,c;
always@(posedgeclk)
begin
b<=a;
c<=b;
end
endmodule
仿真波形(部分):
五、思考题
在blocking模块中按如下写法,仿真与综合的结果会有什么样的变化?
作出仿真波形,分析综合结果。
1.always@(posedgeclk)
begin
c=b;
b=a;
end
2.always@(posedgeclk)b=a;
always@(posedgeclk)c=b;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SOC原理及应用实验指导书修订 实验2 SOC 原理 应用 实验 指导书 修订
![提示](https://static.bdocx.com/images/bang_tan.gif)