FPGA 数据选择器实验
实验目的
(1)进一步熟悉和掌握Quatus18.1的使用
(2)熟悉ip核的调用
(3)学习和掌握电路原理图的设计流程
实验环境
Quatus18.1标准版
Cyclone IV EP4CE6F17C8
测试工具:Signal Tap、In-Systeam Source and Probes Editor
实验原理
1)系统原理
根据4选1数据选择器的工作原理,有公式:
由此可见,要实现选择器功能需要6个输入,1个输出。其中S1S0是数据选择端,A,B,C,D是数据输入端。由S1S0输出高低电平(开关信号)决定数据的输出和传送。
2)电路原理图
定义选择信号:sel(位宽为两位)
定义四个输入信号:din_a、din_b、din_c、din_d
定义输出信号:dout
其中调用ip核得到的RTL视图如下:
3)代码实现
模块代码:
module multip(
input clk ,
input rst_n ,
input din_a ,
input din_b ,
input din_c ,
input din_d ,
input [1:0] sel ,
output dout
);
reg data_out ;
always@(posedge clk or negedge rst_n)begin
if(!rst_n)begin
data_out <= 1'b0;
end
else begin
case(sel)
2'b00:data_out <= din_a;
2'b01:data_out <= din_b;
2'b10:data_out <= din_c;
2'b11:data_out <= din_d;
default:data_out <= 1'b0;
endcase
end
end
assign dout = data_out ;
endmodule
顶层文件代码:
module multiplexer(
input clk ,
input rst_n ,
output dout
);
wire din_a/*synthesis keep*/;
wire din_b/*synthesis keep*/;
wire din_c/*synthesis keep*/ ;
wire din_d/*synthesis keep*/ ;
wire [1:0] sel /*synthesis keep*/;
multip u_multip(
.clk (clk ),
.rst_n (rst_n),
.din_a (din_a),
.din_b (din_b),
.din_c (din_c),
.din_d (din_d),
.sel (sel ),
.dout (dout )
);
wire [31:0] probes;
issp u_issp(
.probe (probes),
.source({sel,din_a,din_b,din_c,din_d})
);
endmodule
4)测试结果
打开In-Systeam Source and Probes Editor测试软件。
其中的source[0]对应是din_d;其中的source[1]对应是din_c;
其中的source[2]对应是din_b;其中的source[3]对应是din_a;
其中的source[4]对应是sel[0];其中的source[5]对应是sel[1];
故而其他值都为0时,将source[0]的值改为1,对应的din_d变换为高电平。dout在sel为00时输出din_a的值为0;如下图:
将source[0]的值改为1,source[4]的值改为1和source[5]的值改为1,对应的din_d、sel[0]、sel[1]变换为高电平。而dout在sel为11时输出din_d的值为1;如下图:
其他改变输入值,进而控制输出选择的信号同理。