【 FPGA 】总线实现形式之选择器
用选择器的思想来实现总线:
总线从宏观上看是“多写多读”的,但是从微观上来看是“一写多读”,因为系统中的各个部件只能分时使用总线,而无法同时使用。也就是在某一固定时刻,总线是“一写多读”的,只不过通过一写控制电路,我们貌似可以在不同时刻为总线分配不同的驱动源,以达到宏观上的“多写多读”。
下面用FPGA来简单地实现总线:
利用多路选择器的选通特性,可以实现总线的功能,这也是FPGA芯片内部设计总线时最常用的方法,因为FPGA芯片内部有些非常丰富的MUX资源。
原理就是通过MUX的选通特性,通过改变选通信号的值来改变写入总线数据的来源。
下面给出示意代码(Verilog HDL):
功能代码主要分为三个部分:
1、选择器控制信号产生部分,采用抢占式优先级译码器(【 FPGA 】抢占式优先级译码器电路)的思路,根据四个外围器件的请求信号产生多路选择器的选择控制信号。
2、写总线部分,即将选通通道的数据写到总线上。
3、读总线部分,各个外围器件根据自己的情况将总线数据读入器件内部进行运算和处理。
-
`timescale 1ns / 1ps
-
//
-
// Company:
-
// Engineer:
-
//
-
// Create Date: 15:49:08 11/05/2018
-
// Design Name:
-
// Module Name: Bus
-
// Project Name:
-
// Target Devices:
-
// Tool versions:
-
// Description:
-
//
-
// Dependencies:
-
//
-
// Revision:
-
// Revision 0.01 - File Created
-
// Additional Comments:
-
//
-
//
-
module Bus(
-
input request0,
-
input request1,
-
input request2,
-
input request3,
-
input [7:0] device0Out,
-
input [7:0] device1Out,
-
input [7:0] device2Out,
-
input [7:0] device3Out,
-
output [7:0] device0In,
-
output [7:0] device1In,
-
output [7:0] device2In,
-
output [7:0] device3In
-
);
-
-
reg [1:0] sel;
-
reg [7:0] bus;
-
-
//generate sel
-
always@(request0,request1,request2,request3)
-
begin
-
//Priority decoder
-
case({request0,request1,request2,request3})
-
4'b0001: sel = 2'b11;
-
4'b0010 - 4'b0011: sel = 2'b10;
-
4'b0100 - 4'b0111: sel = 2'b01;
-
default: sel = 2'b00;
-
endcase
-
end
-
-
//write bus
-
always@(sel,device0Out,device1Out,device2Out,device3Out)
-
begin
-
case(sel)
-
2'b00: bus = device0Out;
-
2'b01: bus = device1Out;
-
2'b10: bus = device2Out;
-
2'b11: bus = device3Out;
-
default: bus = device0Out;
-
endcase
-
end
-
-
//read bus
-
assign device0In = bus;
-
assign device1In = bus;
-
assign device2In = bus;
-
assign device3In = bus;
-
-
-
endmodule
给出RTL Schematic:
通过这个图,可以看出实现这个电路的原理。
下面给出Technology Schematic:
看看FPGA内容是通过什么来实现这个电路的呢?
电路图太大了,只能给出部分:
可见,FPGA内部实现具体的电路要实现大量的lUT,由于使用的FPGA型号是Virtex 7系列的某一款,所以内部的LUT是6输入的LUT。
考虑到实际情况,FPGA内部会使用大量的输入、输出缓冲器。
功能仿真就不写了,简单认识下就OK了,不想深究。
文章来源: reborn.blog.csdn.net,作者:李锐博恩,版权归原作者所有,如需转载,请联系作者。
原文链接:reborn.blog.csdn.net/article/details/83751253
- 点赞
- 收藏
- 关注作者
评论(0)