硬件工程师培训教程(二)攻略
简介
本教程是硬件工程师培训教程的第二部分。在本教程中,我们将学习如何使用Verilog HDL设计数字电路,并通过FPGA进行验证。
准备工作
- 一台装有Xilinx ISE Design Suite的计算机(ISE 14.7版本及以上)
- 一块FPGA开发板(本示例使用的是Basys 2)
- 一个USB数据线
- 一个存储设计文件的文件夹
使用Verilog设计数字电路
- 建立项目
打开Xilinx ISE Design Suite,选择“New Project”,填写项目名称和存储路径,然后点击“Next”。在弹出的“Add Sources”对话框中,选择“Add or create design sources”,然后选择“Verilog Module”作为文件类型。在下一步中,点击“Create File”按钮,以打开文本编辑器,并创建一个名为“my_logic_gate”的Verilog文件。
- 设计数字电路
在文本编辑器中,输入以下代码:
module my_logic_gate(
input a, b,
output f
);
assign f = a & b;
endmodule
代码中定义了一个名为“my_logic_gate”的模块,其中包括两个输入参数(a和b)和一个输出参数(f)。最后一行代码“assign f = a & b;”为逻辑代码,表示当a和b都为1时,f的值为1,否则f的值为0。在这里,我们使用了“与”运算符(&)。
- 综合和映射
接下来,我们需要综合和映射这个数字电路到我们选择的FPGA开发板上。选择“Synthesize - XST”,然后在“Process Properties”中,确保勾选了“Generate Programming File”。
接下来,选中“Implement Design”,然后在“Process Properties”中选择FPGA开发板的型号,点击“Apply”并保存。
- 配置FPGA开发板
将FPGA开发板连接到计算机上,然后打开Xilinx ISE Design Suite菜单栏中的“Configure Target Device”选项。在对话框中,选择FPGA开发板的型号和串口,然后点击“Program”按钮。
至此,我们成功设计了一个数字电路并将其映射到FPGA开发板上。现在,当连接该FPGA开发板的输入端口输入a和b都为1时,该FPGA开发板的输出端口会输出1。
示例1:设计一个二进制加法器
现在让我们来看一个具体的例子。我们需要设计一个二进制加法器,使其在两个4位数相加时能正确地计算出结果。较高位的数字应该在二进制运算中优先考虑。
- 建立项目
建立一个新的Xilinx ISE Design Suite项目,并且创建一个名为“binary_adder”的Verilog文件。
- 设计数字电路
输入以下代码:
module binary_adder(
input [3:0] a,
input [3:0] b,
output [3:0] s
);
wire [3:0] c;
assign s = a ^ b ^ c;
assign c = (a & b) | (a & c) | (b & c);
endmodule
代码中,我们定义了一个名为“binary_adder”的模块,其中包括两个4位输入参数(a和b)和一个4位输出参数(s)。我们还定义了一个中间变量c,用于存储两个位之间的进位。最后两行代码是逻辑代码,用于计算s和c的值。
- 综合和映射
选择“Synthesize - XST”和“Implement Design” 配置向导来综合和映射该数字电路。然后运行“Configure Target Device”配置FPGA开发板。
现在,我们已经成功地设计了一个二进制加法器,可以将两个4位数字相加并在显示器上输出结果。
示例2:设计一个4位计数器
现在我们来看另一个示例,我们需要设计一个4位计数器。当按下一个外部按钮时,计数器会以十进制形式增加1。
- 建立项目
建立一个新的Xilinx ISE Design Suite项目,并且创建一个名为“counter”的Verilog文件。
- 设计数字电路
输入以下代码:
module counter(
input clk, rst, button,
output reg [3:0] count
);
always @ (posedge clk, posedge rst) begin
if (rst) begin
count <= 4'b0;
end else if (button) begin
count <= count + 1;
end
end
endmodule
代码中,我们定义了一个名为“counter”的模块,包括一个时钟输入参数(clk)、一个复位输入参数(rst)、一个按钮输入参数(button)和一个4位计数器输出参数(count)。 line 4 and 8 define a reg data type variable(寄存器变量) count. 这个寄存器会按照always块中if的条件进行更新。 将条件解释为,如果rst为1,则寄存器变量“count”被重置为4位0的值;如果button为1,则“count”为其自我增加值。
- 综合和映射
同样的,选择“Synthesize - XST”和“Implement Design”配置向导来综合和映射该数字电路。然后运行“Configure Target Device”配置FPGA开发板。
现在,我们已经成功地设计了一个4位计数器,其输出会随着按钮按下而增加。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:硬件工程师培训教程(二) - Python技术站