Verilog 冒泡排序Word文档下载推荐.docx

上传人:b****3 文档编号:14834596 上传时间:2022-10-25 格式:DOCX 页数:12 大小:843.88KB
下载 相关 举报
Verilog 冒泡排序Word文档下载推荐.docx_第1页
第1页 / 共12页
Verilog 冒泡排序Word文档下载推荐.docx_第2页
第2页 / 共12页
Verilog 冒泡排序Word文档下载推荐.docx_第3页
第3页 / 共12页
Verilog 冒泡排序Word文档下载推荐.docx_第4页
第4页 / 共12页
Verilog 冒泡排序Word文档下载推荐.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

Verilog 冒泡排序Word文档下载推荐.docx

《Verilog 冒泡排序Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《Verilog 冒泡排序Word文档下载推荐.docx(12页珍藏版)》请在冰豆网上搜索。

Verilog 冒泡排序Word文档下载推荐.docx

2012.11.11

实验要求:

1、掌握任务在Verilog模块设计中的应用;

2、学会在电平敏感列表的always中使用拼接操作、任务和阻塞赋值等语句,并生成复杂组合逻辑的高级方法;

3、掌握利用有限状态机实现一般时序逻辑分析的方法;

4、掌握用Verilog编写可综合的有限状态机的标准模版;

掌握用Verilog编写状态机模块的测试文件的一般方法。

实验内容:

1、设计一个功能相同的模块,该模块能完成四个8位2进制输入数据的冒泡排序。

假设8位数据是按照时钟节拍串行输入的,要求用时钟触发任务的执行法,每个时钟周期完成一次数据交换的操作。

2、使用纯组合逻辑实现四个8位2进制输入数据的冒泡排序。

实验代码:

A.Verilog程序代码_时钟触发

moduleRank(clk,x_input,ra0,rb0,rc0,rd0,ra1,rb1,rc1,rd1);

inputclk;

reg[3:

0]state;

input[7:

0]x_input;

output[7:

0]ra0,rb0,rc0,rd0,ra1,rb1,rc1,rd1;

reg[7:

0]va,vb,vc,vd;

parameterIDLE0='

d0,IDLE1='

d1,IDLE2='

d2,IDLE3='

d3,A='

d4,B='

d5,C='

d6,D='

d7,E='

d8;

always@(posedgeclk)casex(state)IDLE0:

begin{va}={x_input};

state<

=IDLE1;

endIDLE1:

begin{vb}={x_input};

=IDLE2;

endIDLE2:

begin{vc}={x_input};

=IDLE3;

endIDLE3:

begin{vd}={x_input};

state<

=A;

{ra0,rb0,rc0,rd0}={va,vb,vc,vd};

end

A:

begin

sort2(va,vc);

=B;

B:

sort2(vb,vd);

=C;

C:

beginsort2(va,vb);

=D;

D:

sort2(vc,vd);

=E;

E:

beginsort2(vb,vc);

{ra1,rb1,rc1,rd1}={va,vb,vc,vd};

=IDLE0;

default:

endcase

tasksort2;

inout[7:

0]x,y;

reg[7:

0]tmp;

if(x>

y)begintmp=x;

x=y;

y=tmp;

endendtaskendmodule

A.Verilog测试代码_时钟触发

moduleTest;

always#10clk=~clk;

//Inputs

always@(posedgeclk)

regclk;

x_input={$random}%6;

//保证随机数不大于reg[7:

8位

//Outputs

wire[7:

0]ra0;

initial

begin

0]rb0;

0]rc0;

//InitializeInputs

0]rd0;

clk=0;

0]ra1;

x_input=0;

0]rb1;

#100$stop;

endwire[7:

0]rc1;

0]rd1;

endmodule

//InstantiatetheUnitUnderTest(UUT)

Rankuut(

.clk(clk),

.x_input(x_input),

.ra0(ra0),.rc0(rc0),

.rb0(rb0),.rd0(rd0),

.ra1(ra1),.rb1(rb1),

.rc1(rc1),.rd1(rd1)

);

仿真波形.

RTL级仿真:

综合后门级仿真:

B.Verilog程序代码_纯组合逻辑

moduleRank(ra,rb,rc,rd,a,b,c,d);

tasksort2;

0]a,b,c,d;

0]ra,rb,rc,rd;

y)reg[7:

beginreg[7:

tmp=x;

always@(aorborcord)

y=tmp;

{va,vb,vc,vd}={a,b,c,d};

endsort2(va,vc);

endtasksort2(vb,vd);

sort2(va,vb);

sort2(vb,vc);

{ra,rb,rc,rd}={va,vb,vc,vd};

纯组合逻辑测试代码_B.Verilog

moduleTest;

//Inputsreg[7:

0]a;

reg[7:

0]b;

0]c;

0]d;

//Outputswire[7:

0]ra;

0]rb;

0]rc;

0]rd;

//InstantiatetheUnitUnderTest(UUT)Rankuut(.ra(ra),.rb(rb),.rc(rc),.rd(rd),.a(a),.b(b),.c(c),

.d(d));

initialbegin//InitializeInputsa=0;

b=0;

c=0;

d=0;

repeat(50)begin

#100a={$random}%6;

b={$random}%6;

c={$random}%6;

d={$random}%6;

end//Wait100nsforglobalresettofinish

//Addstimulushere

endendmodule

仿真结果:

仿真波形

综合后门级仿真:

实验过程分析:

一、代码分析

I.对于纯组合逻辑做法。

第一种做法主要同过书写一个task,这一点有点类似C语言的子函数。

随后便是利用这个task做简单

的纯组合逻辑电路设计

II.对于时序触发做法。

第二种做法主要使用状态机,通过一个始终周期的到来先进行数据的串行输入,然后再进行数据交换,

以此达到冒泡排序的目的。

二、仿真分析

在clk前四个时钟周期里,进行了数据的输入,此时并未排序。

从第五个时钟周期开始到第九个时钟

周期结束,数据进行冒泡排序并输出。

接下来循环50次。

在波形上已经很清晰的指出输入数据以此冒泡排序后的数据,不涉及任何延迟。

实验心得总结:

通过这一次的实验,可以说是悲剧万分呀。

主要还是对于时钟触发这种做法不太理解,从一开始的完全一头雾水到最后做到较为透彻的理解,这一过程十分不容易。

通过本次实验,学会了状态机的书写方法,重要的是学会了仿真代码的书写方法。

并且靠自己读懂了仿真波形。

指导教师批阅意见:

成绩评定:

指导教师签字:

年月日

备注:

注:

1、报告内的项目或内容设置,可根据实际情况加以调整和补充。

日内。

10、教师批改学生实验报告时间应在学生提交实验报告时间后2

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 生物学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1