Forum Discussion
Altera_Forum
Honored Contributor
14 years agoHow to use Avalon-MM Master BFM?
Hello, all. I want to use Avalon Verification IP Suite to check a Qsys custom componet, which have an Avalon salve interface and a Avalon conduit interface connecting a LSI. I wrote this p...
Altera_Forum
Honored Contributor
13 years agoThank you, your tutorial is great, I have seen it already and learned a lot. There are few tutorials for single BFM, but nothing for two or more. Even in Avalon Verification IP Suite User Guide is described simulation with only one BFM.
Here is my task. Without commented push commands it works fine. Now it produces already mentioned error. task master_set_and_push_command; input Request_t request; input [`AV_ADDRESS_W-1:0] addr; input [`AV_DATA_W-1:0] data; input [`AV_NUMSYMBOLS-1:0] byte_enable; input [`AV_DATA_W-1:0] idle; input [31:0] init_latency; begin if (request == REQ_WRITE) begin tb.simulation_inst.mm_master_bfm_0.set_command_request(request); tb.simulation_inst.mm_master_bfm_0.set_command_idle(idle, `INDEX_ZERO); tb.simulation_inst.mm_master_bfm_0.set_command_init_latency(init_latency); tb.simulation_inst.mm_master_bfm_0.set_command_address(addr); tb.simulation_inst.mm_master_bfm_0.set_command_byte_enable(byte_enable,`INDEX_ZERO); tb.simulation_inst.mm_master_bfm_0.set_command_burst_size(1); tb.simulation_inst.mm_master_bfm_0.set_command_burst_count(1); tb.simulation_inst.mm_master_bfm_0.set_command_burst_size(8); tb.simulation_inst.mm_master_bfm_0.set_command_burst_count(8); tb.simulation_inst.mm_master_bfm_0.set_command_byte_enable(byte_enable, 1); tb.simulation_inst.mm_master_bfm_0.set_command_byte_enable(byte_enable, 2); tb.simulation_inst.mm_master_bfm_0.set_command_byte_enable(byte_enable, 3); tb.simulation_inst.mm_master_bfm_0.set_command_byte_enable(byte_enable, 4); tb.simulation_inst.mm_master_bfm_0.set_command_byte_enable(byte_enable, 5); tb.simulation_inst.mm_master_bfm_0.set_command_byte_enable(byte_enable, 6); tb.simulation_inst.mm_master_bfm_0.set_command_byte_enable(byte_enable, 7); tb.simulation_inst.mm_master_bfm_0.set_command_data(data, `INDEX_ZERO); tb.simulation_inst.mm_master_bfm_0.set_command_data($random(), 1); tb.simulation_inst.mm_master_bfm_0.set_command_data($random(), 2); tb.simulation_inst.mm_master_bfm_0.set_command_data($random(), 3); tb.simulation_inst.mm_master_bfm_0.set_command_data($random(), 4); tb.simulation_inst.mm_master_bfm_0.set_command_data($random(), 5); tb.simulation_inst.mm_master_bfm_0.set_command_data($random(), 6); tb.simulation_inst.mm_master_bfm_0.set_command_data($random(), 7); tb.simulation_inst.mm_master_bfm_0.push_command(); tb.simulation_inst.mm_master_bfm_1.set_command_request(request); tb.simulation_inst.mm_master_bfm_1.set_command_idle(idle, `INDEX_ZERO); tb.simulation_inst.mm_master_bfm_1.set_command_init_latency(init_latency); tb.simulation_inst.mm_master_bfm_1.set_command_address(addr); tb.simulation_inst.mm_master_bfm_1.set_command_byte_enable(byte_enable,`INDEX_ZERO); tb.simulation_inst.mm_master_bfm_1.set_command_burst_size(1); tb.simulation_inst.mm_master_bfm_1.set_command_burst_count(1); tb.simulation_inst.mm_master_bfm_1.set_command_burst_size(8); tb.simulation_inst.mm_master_bfm_1.set_command_burst_count(8); tb.simulation_inst.mm_master_bfm_1.set_command_byte_enable(byte_enable, 1); tb.simulation_inst.mm_master_bfm_1.set_command_byte_enable(byte_enable, 2); tb.simulation_inst.mm_master_bfm_1.set_command_byte_enable(byte_enable, 3); tb.simulation_inst.mm_master_bfm_1.set_command_byte_enable(byte_enable, 4); tb.simulation_inst.mm_master_bfm_1.set_command_byte_enable(byte_enable, 5); tb.simulation_inst.mm_master_bfm_1.set_command_byte_enable(byte_enable, 6); tb.simulation_inst.mm_master_bfm_1.set_command_byte_enable(byte_enable, 7); tb.simulation_inst.mm_master_bfm_1.set_command_data(data, `INDEX_ZERO); tb.simulation_inst.mm_master_bfm_1.set_command_data(1000*($random()), 1); tb.simulation_inst.mm_master_bfm_1.set_command_data($random(), 2); tb.simulation_inst.mm_master_bfm_1.set_command_data($random(), 3); tb.simulation_inst.mm_master_bfm_1.set_command_data($random(), 4); tb.simulation_inst.mm_master_bfm_1.set_command_data($random(), 5); tb.simulation_inst.mm_master_bfm_1.set_command_data($random(), 6); tb.simulation_inst.mm_master_bfm_1.set_command_data($random(), 7); //tb.simulation_inst.mm_master_bfm_1.push_command(); end else begin tb.simulation_inst.mm_master_bfm_0.set_command_request(request); tb.simulation_inst.mm_master_bfm_0.set_command_idle(idle, `INDEX_ZERO); tb.simulation_inst.mm_master_bfm_0.set_command_init_latency(init_latency); tb.simulation_inst.mm_master_bfm_0.set_command_address(addr); tb.simulation_inst.mm_master_bfm_0.set_command_byte_enable(byte_enable,`INDEX_ZERO); tb.simulation_inst.mm_master_bfm_0.set_command_burst_size(1); tb.simulation_inst.mm_master_bfm_0.set_command_burst_count(1); tb.simulation_inst.mm_master_bfm_0.set_command_data(0, 0); //tb.simulation_inst.mm_master_bfm_0.push_command(); tb.simulation_inst.mm_master_bfm_1.set_command_request(request); tb.simulation_inst.mm_master_bfm_1.set_command_idle(idle, `INDEX_ZERO); tb.simulation_inst.mm_master_bfm_1.set_command_init_latency(init_latency); tb.simulation_inst.mm_master_bfm_1.set_command_address(addr); tb.simulation_inst.mm_master_bfm_1.set_command_byte_enable(byte_enable,`INDEX_ZERO); tb.simulation_inst.mm_master_bfm_1.set_command_burst_size(1); tb.simulation_inst.mm_master_bfm_1.set_command_burst_count(1); tb.simulation_inst.mm_master_bfm_1.set_command_data(0, 0); tb.simulation_inst.mm_master_bfm_1.push_command(); end end endtask