verilog实现冒泡法排序

// 冒泡法排序 用verilog实现
module sort(input clk,input rst_n,input [3:0] data0,data1,data2,data3,data4,data5,data6,data7,data8,data9,input load,output  complete
//  output reg [3:0] data_out0,data_out1,data_out2,data_out3,data_out4,data_out5,data_out6,data_out7,data_out8,data_out9);
reg [3:0] data_out0,data_out1,data_out2,data_out3,data_out4,data_out5,data_out6,data_out7,data_out8,data_out9;
parameter idle=2'b00,loading=2'b01,sorting=2'b10,comp=2'b11;
reg [1:0] state, nstate;
reg [4:0] cnt;// 状态转换
always@(posedge clk or negedge rst_n)if(!rst_n)state<=idle;else state<=nstate;// 计数cnt, 9个数据需要排序的clk为 18;
always@(posedge clk or negedge rst_n)if(!rst_n)cnt<=0;else case(state)sorting: cnt<=cnt+1;default: cnt<=0;endcase// 排序,若相邻数,前者大于后者,交换;
always@(posedge clk or negedge rst_n)if(!rst_n)begindata_out0<=0;data_out1<=0;data_out2<=0;data_out3<=0;    data_out4<=0;data_out5<=0;    data_out6<=0;data_out7<=0;    data_out8<=0;data_out9<=0;endelse if(load)begindata_out0<=data0;data_out1<=data1;data_out2<=data2;data_out3<=data3;    data_out4<=data4;data_out5<=data5;    data_out6<=data6;data_out7<=data7;    data_out8<=data8;data_out9<=data9;end   else beginif(data_out0>data_out1 && cnt[0]==0)     // 不能同时对data_out1赋值,需要条件将相邻两次分开begindata_out1<=data_out0;data_out0<=data_out1;endif(data_out1>data_out2 && cnt[0]==1)begindata_out1<=data_out2;data_out2<=data_out1;end if(data_out2>data_out3 && cnt[0]==0)begindata_out2<=data_out3;data_out3<=data_out2;end if(data_out3>data_out4 && cnt[0]==1)begindata_out3<=data_out4;data_out4<=data_out3;end if(data_out4>data_out5 && cnt[0]==0)begindata_out4<=data_out5;data_out5<=data_out4;endif(data_out5>data_out6 && cnt[0]==1)begindata_out5<=data_out6;data_out6<=data_out5;endif(data_out6>data_out7 && cnt[0]==0)begindata_out6<=data_out7;data_out7<=data_out6;endif(data_out7>data_out8 && cnt[0]==1)begindata_out8<=data_out7;data_out7<=data_out8;endif(data_out8>data_out9 && cnt[0]==0)begindata_out8<=data_out9;data_out9<=data_out8;endend// nstate
always@(*)case(state)idle: if(load==1) nstate=loading; else nstate=idle;loading: nstate=sorting;sorting: if(cnt>20) nstate=comp; else nstate=sorting;comp: if(load==1) nstate=loading; else nstate=idle;default: nstate=idle;endcaseassign complete= (state==comp);  endmodule

testbench(systemverilog)

`timescale 1ns / 1ps
//------------------------------------------------
// 类定义,产生随机数;
class data_rand;
rand logic [3:0] data0;
rand logic [3:0] data1;
rand logic [3:0] data2;
rand logic [3:0] data3;
rand logic [3:0] data4;
rand logic [3:0] data5;
rand logic [3:0] data6;
rand logic [3:0] data7;
rand logic [3:0] data8;
rand logic [3:0] data9;
endclass//-------------------------------------
// 接口定义
interface sort_if(input logic clk, rst_n);
logic [3:0] data0;
logic [3:0] data1;
logic [3:0] data2;
logic [3:0] data3;
logic [3:0] data4;
logic [3:0] data5;
logic [3:0] data6;
logic [3:0] data7;
logic [3:0] data8;
logic [3:0] data9;
logic load;clocking cb_input @(posedge clk);
input data0;
input data1;
input data2;
input data3;
input data4;
input data5;
input data6;
input data7;
input data8;
input data9;
input load;
endclockingclocking cb_output @(posedge clk);
output data0;
output data1;
output data2;
output data3;
output data4;
output data5;
output data6;
output data7;
output data8;
output data9;
output load;
endclockingmodport DUT (clocking cb_input, input rst_n);    // 使用没成功??
modport TB (clocking cb_output, input rst_n);
endinterface
//-------------------------------------------------
// 激励产生模块
module tb_sort(sort_if inf );
data_rand p;initial begin
p=new();for(int i=0; i<30; i=i+1)
begin
#230
assert(p.randomize());
inf.data0=p.data0;
inf.data1=p.data1;
inf.data2=p.data2;
inf.data3=p.data3;
inf.data4=p.data4;
inf.data5=p.data5;
inf.data6=p.data6;
inf.data7=p.data7;
inf.data8=p.data8;
inf.data9=p.data9;
inf.load=1;
#10
inf.load=0;
end
end
endmodule
//------------------------------------module top();
logic clk, rst_n;
logic complete;sort_if if0(clk,rst_n);  // 接口实例化tb_sort tb_sort (if0);      // 激励模块实例化sort sort (                   // DUT实例化.clk(if0.clk),.rst_n(if0.rst_n),.load(if0.load),.data0(if0.data0),.data1(if0.data1),.data2(if0.data2),.data3(if0.data3),.data4(if0.data4),.data5(if0.data5),    .data6(if0.data6),.data7(if0.data7),    .data8(if0.data8),.data9(if0.data9),.complete(complete));    initial begin clk=0; forever #5 clk=~clk; end   //top模块 产生clk 和rst_n;
initial begin rst_n=0; #30 rst_n=1; end
endmodule

verilog实现冒泡法排序相关推荐

  1. C语言——冒泡法排序应用

    #include <stdio.h> #include <stdlib.h> int main()/*有int main 就会有return 0;如果是void main ,就 ...

  2. PTA 基础编程题目集 7-27 冒泡法排序 C语言

    PTA 基础编程题目集 7-27 冒泡法排序 C语言 将N个整数按从小到大排序的冒泡排序法是这样工作的:从头到尾比较相邻两个元素,如果前面的元素大于其紧随的后面元素,则交换它们.通过一遍扫描,则最后一 ...

  3. 7-27 冒泡法排序 (C语言)

    7-27 冒泡法排序 (20 分)将N个整数按从小到大排序的冒泡排序法是这样工作的:从头到尾比较相邻两个元素,如果前面的元素大于其紧随的后面元素,则交换它们.通过一遍扫描,则最后一个元素必定是最大的元 ...

  4. 从头学习linux C 冒泡法排序

    下面是一个简单冒泡法排序,代码如下: [cpp] view plaincopy #include <stdio.h> #define LEN 10 int main() { int a,i ...

  5. C语言 数组排序 – 冒泡法排序 - C语言零基础入门教程

    目录 一.简介 二.数组冒泡法排序原理 三.数组冒泡法排序实战 四.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.简介 经过前面的学习, ...

  6. 7-27 冒泡法排序 (20 分)

    7-27 冒泡法排序 (20 分) 将N个整数按从小到大排序的冒泡排序法是这样工作的:从头到尾比较相邻两个元素,如果前面的元素大于其紧随的后面元素,则交换它们.通过一遍扫描,则最后一个元素必定是最大的 ...

  7. 汇编语言---冒泡法排序

    汇编语言冒泡法排序 配置环境 编辑程序 运行程序 后续 配置环境 首先双击下载程序进行下载.(没有安装程序的,可以下载我为大家准备的安装文件.) 不会安装的可以看一下文件 将debug.exe放入C盘 ...

  8. 微课|中学生可以这样学Python(例8.22):冒泡法排序

    适用教材: 董付国,应根球.<中学生可以这样学Python>.清华大学出版社,2017. 第8章  常用算法的Python实现 例8.22  冒泡法排序 京东购买链接:https://it ...

  9. 冒泡法排序(从小到大)

    冒泡法排序(从小到大) 1. 首先从键盘回车输入10个整数,然后进行两层循环来判断大小和交换 2. 第一层循环控制进行几轮比较,10个数只需9轮即可,故i取0-8:第二层循环控制每一轮比较中谁和谁比较 ...

最新文章

  1. 雷观(七):靠谱的程序员,不是随便一个码农就可以做到的
  2. datagenerator解决训练时候内存不足问题
  3. 前端各阶段资源,学得完算我输
  4. python学习笔记四-列表
  5. camunda流程定义表无数据_BPM - 业务流程管理
  6. (转)淘淘商城系列——实现添加商品功能
  7. 03-25 内存统计
  8. nodejs连接远程MySQL数据库_nodejs remote链接mysql数据库总结
  9. php 批量改文件名后缀名_PHP 批量修改文件后缀名
  10. 基于发起源判断CSRF***的方法
  11. linux cpu 个数、核心数、线程数
  12. matlab中构建Cuk变换器,CUK变换器的SIMULINK仿真与应用.pdf
  13. STAR原则是什么?
  14. FPS 每秒传输帧数(Frames Per Second)
  15. python row_python – 用于getrow的Scipy稀疏矩阵替代()
  16. 【转】互操作性的区块链系统设计理念
  17. 噩梦射手(SurvivalShooter)教程(一)
  18. 短视频开发SDK 架构设计实践
  19. Beyond Compare4秘钥
  20. 华为交换机审计配置_上网行为管理审计之交换机端口镜像配置(华为)

热门文章

  1. 总结:三种昆虫天敌标本的制作方法
  2. ARM内核与架构通俗理解:
  3. Photoshop CC2017软件
  4. ADAS-开源环视360全景拼接代码原理分析与实现(一)
  5. 将Google Talk嵌入到网页中
  6. 眼睛的疾病数不清,这些症状不及时处理都有可能致盲!
  7. 大头贴制作软件测试面试题,【原创】我型我秀 大头贴制作系统试用手记
  8. 在“He3 Minecraft”中自由发挥打造专属工具
  9. 彻底解决spring security oauth2 自动续签token问题
  10. 函数名前加static与不加static的区别