【S002】round robin Verilog实现

目录

1.功能表述

2.仿真波形

3.功能代码

4.test beach


1.功能表述

找最末端bit=1的下标,难点:输出是连续的,不能中间不能隔拍。

    input        [NUM-1:0]  	 req,//15'b010_1000_1010_1100 //各个总线的请求
    input                        req_valid,//脉冲//标志输入有效
    output 	 [NUM_LOG-1:0]	 sel,//依次输出为1下标,选中某个总线//2 3 5 7 11 13 
    output			 sel_valid

2.仿真波形

3.功能代码

`timescale 100 ps / 1 ps
module round_robin #(
parameter NUM			=	4,
parameter NUM_LOG		=	2)
(
    input        				clk,
    input        				rst_n,
	
    input        [NUM-1:0]  	req,//1101100//各个总线的请求
    input                	 	req_valid,//脉冲//标志输入有效
	output 	     [NUM_LOG-1:0]	sel,//依次输出为1下标,选中某个总线
	output						sel_valid
);

reg [NUM-1:0]  	in_value;//存放被修改的
reg [NUM_LOG-1:0]	out_value;
always@(posedge clk or negedge rst_n)begin
	    if(rst_n == 1'b0)begin
		in_value <= #1 {NUM{1'b0}};
    end else if( req_valid ) begin//输入有效将入存下来//脉冲
		in_value <= #1 req;
    end else  begin//
		// in_value <= #1 in_value & (~( 16'b1<<(out_value+1)) );
		in_value <= #1 in_value & (~( 16'b1<<out_value) );
	end		
end
assign sel 		 = out_value;
assign sel_valid = out_value!= {NUM_LOG{1'b0}};

-----------用来搜索最低位1的位置(下标),单独一部分------
// parameter NUM			=	4;
// parameter NUM_LOG		=	2;
integer i ;
// wire [NUM-1:0]  	in_value;//1101100
// wire [NUM_LOG-1:0]	out_value;
always@(*)begin
	out_value = {NUM_LOG{1'b0}};
	    if( in_value == {NUM{1'b0} })begin
			out_value = { NUM_LOG{1'b0} };
			i 		  = 0;
    end else begin
		for ( i=NUM-1 ; i>=0;i=i-1 ) begin
			if ( in_value[i] == 1'b1 )
				out_value = i[NUM_LOG-1:0];
		end
	end
end
	
endmodule

4.test beach

`timescale 100 ps / 1 ps
module tb();
	
parameter NUM		=15;
parameter NUM_LOG   =4;

    reg [NUM-1:0]  		req;
    reg 		  		req_valid;
    wire [NUM_LOG-1:0]  sel;
    wire 		  		sel_valid;
	reg clk,rst_n;
	
    round_robin # (
	.NUM(NUM),
	.NUM_LOG(NUM_LOG)		
	)
	round_robin_u (
	.clk    	(clk  ),
	.rst_n  	(rst_n),
	.req    	(req ),
	.req_valid  (req_valid),
	.sel    	(sel),
	.sel_valid  (sel_valid)
    );

    initial begin
	clk   = 1'b0;
	rst_n = 1'b0;
	req   = 1'b0;
	req_valid = 1'b0;
	#30ns;
	rst_n = 1'b1;
    end

    initial begin
	forever begin
	    #5ns;
	    clk = ~clk;
	end
    end
    initial begin
	#20ns;
	@(posedge clk) #1ns; req = 1'b0;
	@(posedge clk) #1ns; req_valid = 1'b0;
	
	#100//2 3 5 7 11 13 15
	@(posedge clk) #1ns; req = 15'b010_1000_1010_1100;req_valid = 1'b1;
	@(posedge clk) #1ns; req_valid = 1'b0;
    end
endmodule

仿真工程

https://www.jianguoyun.com/p/DczCmuUQupbwCBj9msID (访问密码 : csdn)

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
教职员工管理系统可以采用面向对象编程思想,使用 Python 编程语言来实现。以下是一个简单的示例代码: ```python class Person: def __init__(self, name, age, gender): self.name = name self.age = age self.gender = gender class Employee(Person): def __init__(self, name, age, gender, id, department, salary): super().__init__(name, age, gender) self.id = id self.department = department self.salary = salary class Teacher(Employee): def __init__(self, name, age, gender, id, department, salary, subjects): super().__init__(name, age, gender, id, department, salary) self.subjects = subjects class Staff(Employee): def __init__(self, name, age, gender, id, department, salary, duties): super().__init__(name, age, gender, id, department, salary) self.duties = duties class ManagementSystem: def __init__(self): self.employees = [] def add_employee(self, employee): self.employees.append(employee) def remove_employee(self, employee): self.employees.remove(employee) def search_employee(self, id): for employee in self.employees: if employee.id == id: return employee return None def list_employees(self): for employee in self.employees: print(f"{employee.name} ({employee.gender}), {employee.age} years old, ID: {employee.id}, Department: {employee.department}, Salary: {employee.salary}") # 示例使用 ms = ManagementSystem() # 添加员工 t1 = Teacher("Tom", 35, "Male", "T001", "Math", 5000, ["Algebra", "Geometry"]) t2 = Teacher("Mary", 30, "Female", "T002", "English", 4500, ["Literature", "Writing"]) s1 = Staff("John", 25, "Male", "S001", "Security", 3000, "Guarding") s2 = Staff("Lisa", 28, "Female", "S002", "Cafeteria", 3500, "Cooking") ms.add_employee(t1) ms.add_employee(t2) ms.add_employee(s1) ms.add_employee(s2) # 查询员工 e = ms.search_employee("T002") if e: print(f"Employee found: {e.name}") else: print("Employee not found") # 列举员工 ms.list_employees() # 删除员工 ms.remove_employee(s2) # 列举员工 ms.list_employees() ``` 这个示例代码中,通过定义 `Person`、`Employee`、`Teacher` 和 `Staff` 等类来表示不同类型的人员,通过 `ManagementSystem` 类来管理员工信息,包括添加、删除、查询和列举等功能。在实际使用时,还可以按照需要添加更多的功能或细节。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_1615549892

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值