2020-10-31 13:45:53 +01:00

167 lines
3.2 KiB
Verilog
Executable File

`timescale 1ns / 1ns
////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer:
//
// Create Date: 10:44:32 05/20/2011
// Design Name: busmaster
// Module Name: E:/Xilinx ISE/workspace/u1/busmasterTest.v
// Project Name: u1
// Target Device:
// Tool versions:
// Description:
//
// Verilog Test Fixture created by ISE for module: busmaster
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
////////////////////////////////////////////////////////////////////////////////
/*
Aufgabenteil b):
Die hinteren Devices können aushungern, da die vorderen Devices den Bus blockieren.
Um dies zu verhindern, könnte man für jedes Device ein Grant-Signal einführen, so dass
der Busmaster nach Prioritätsvergabe oder ähnlichem die Devices dem Bus zuteilen kann.
*/
module busmasterTest;
// Inputs
reg clk;
reg resetBusmaster;
reg resetDev0;
reg resetDev1;
reg resetDev2;
reg resetDev3;
// Outputs
wire grant;
wire next_grant_0_1;
wire next_grant_1_2;
wire next_grant_2_3;
wire [31:0] data_device_to_busmaster;
wire [3:0] id_device_to_busmaster;
wire request_device_to_busmaster;
// Instantiate the Unit Under Test (UUT)
busmaster uut (
.clk(clk),
.reset(resetBusmaster),
.request(request_device_to_busmaster),
.datain(data_device_to_busmaster),
.id(id_device_to_busmaster),
.grant(grant)
);
device #(0) device0( .clk(clk),
.reset(resetDev0),
.grant(grant),
.dataout(data_device_to_busmaster),
.id(id_device_to_busmaster),
.next_grant(next_grant_0_1),
.request(request_device_to_busmaster));
device #(1) device1( .clk(clk),
.reset(resetDev1),
.grant(next_grant_0_1),
.dataout(data_device_to_busmaster),
.id(id_device_to_busmaster),
.next_grant(next_grant_1_2),
.request(request_device_to_busmaster));
device #(2) device2( .clk(clk),
.reset(resetDev2),
.grant(next_grant_1_2),
.dataout(data_device_to_busmaster),
.id(id_device_to_busmaster),
.next_grant(next_grant_2_3),
.request(request_device_to_busmaster));
device #(3) device3( .clk(clk),
.reset(resetDev3),
.grant(next_grant_2_3),
.dataout(data_device_to_busmaster),
.id(id_device_to_busmaster),
.next_grant(),
.request(request_device_to_busmaster));
//generate clock
always
begin
clk = 1; #5; clk = 0; #5;
end
initial begin
// Initialize Inputs
resetBusmaster = 0;
resetDev0 = 0;
resetDev1 = 0;
resetDev2 = 0;
resetDev3 = 0;
// Wait 100 ns for global reset to finish
#100;
resetBusmaster = 1;
#100;
resetBusmaster = 0;
#100;
resetDev1 = 1;
#100;
resetDev1 = 0;
#100;
resetDev0 = 1;
#100;
resetDev0 = 0;
#100;
resetDev2 = 1;
#100;
resetDev2 = 0;
#100;
resetDev3 = 1;
#100;
resetDev3 = 0;
// Add stimulus here
end
endmodule