mirror of
https://github.com/tu-darmstadt-informatik/Computer-Microsystems.git
synced 2025-12-13 07:45:59 +00:00
167 lines
3.2 KiB
Verilog
Executable File
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
|
|
|