verilog实现冒泡法排序
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实现冒泡法排序相关推荐
- C语言——冒泡法排序应用
#include <stdio.h> #include <stdlib.h> int main()/*有int main 就会有return 0;如果是void main ,就 ...
- PTA 基础编程题目集 7-27 冒泡法排序 C语言
PTA 基础编程题目集 7-27 冒泡法排序 C语言 将N个整数按从小到大排序的冒泡排序法是这样工作的:从头到尾比较相邻两个元素,如果前面的元素大于其紧随的后面元素,则交换它们.通过一遍扫描,则最后一 ...
- 7-27 冒泡法排序 (C语言)
7-27 冒泡法排序 (20 分)将N个整数按从小到大排序的冒泡排序法是这样工作的:从头到尾比较相邻两个元素,如果前面的元素大于其紧随的后面元素,则交换它们.通过一遍扫描,则最后一个元素必定是最大的元 ...
- 从头学习linux C 冒泡法排序
下面是一个简单冒泡法排序,代码如下: [cpp] view plaincopy #include <stdio.h> #define LEN 10 int main() { int a,i ...
- C语言 数组排序 – 冒泡法排序 - C语言零基础入门教程
目录 一.简介 二.数组冒泡法排序原理 三.数组冒泡法排序实战 四.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.简介 经过前面的学习, ...
- 7-27 冒泡法排序 (20 分)
7-27 冒泡法排序 (20 分) 将N个整数按从小到大排序的冒泡排序法是这样工作的:从头到尾比较相邻两个元素,如果前面的元素大于其紧随的后面元素,则交换它们.通过一遍扫描,则最后一个元素必定是最大的 ...
- 汇编语言---冒泡法排序
汇编语言冒泡法排序 配置环境 编辑程序 运行程序 后续 配置环境 首先双击下载程序进行下载.(没有安装程序的,可以下载我为大家准备的安装文件.) 不会安装的可以看一下文件 将debug.exe放入C盘 ...
- 微课|中学生可以这样学Python(例8.22):冒泡法排序
适用教材: 董付国,应根球.<中学生可以这样学Python>.清华大学出版社,2017. 第8章 常用算法的Python实现 例8.22 冒泡法排序 京东购买链接:https://it ...
- 冒泡法排序(从小到大)
冒泡法排序(从小到大) 1. 首先从键盘回车输入10个整数,然后进行两层循环来判断大小和交换 2. 第一层循环控制进行几轮比较,10个数只需9轮即可,故i取0-8:第二层循环控制每一轮比较中谁和谁比较 ...
最新文章
- 雷观(七):靠谱的程序员,不是随便一个码农就可以做到的
- datagenerator解决训练时候内存不足问题
- 前端各阶段资源,学得完算我输
- python学习笔记四-列表
- camunda流程定义表无数据_BPM - 业务流程管理
- (转)淘淘商城系列——实现添加商品功能
- 03-25 内存统计
- nodejs连接远程MySQL数据库_nodejs remote链接mysql数据库总结
- php 批量改文件名后缀名_PHP 批量修改文件后缀名
- 基于发起源判断CSRF***的方法
- linux cpu 个数、核心数、线程数
- matlab中构建Cuk变换器,CUK变换器的SIMULINK仿真与应用.pdf
- STAR原则是什么?
- FPS 每秒传输帧数(Frames Per Second)
- python row_python – 用于getrow的Scipy稀疏矩阵替代()
- 【转】互操作性的区块链系统设计理念
- 噩梦射手(SurvivalShooter)教程(一)
- 短视频开发SDK 架构设计实践
- Beyond Compare4秘钥
- 华为交换机审计配置_上网行为管理审计之交换机端口镜像配置(华为)