スイッチとボタンでBRAMに書き込んでみる
#fpga #verilog #bram
スイッチとボタンでブロックRAMへ書き込む練習。
仕様
BRAMの指定したアドレスのデータを表示
RAM上の指定したアドレス(sw15〜sw8)のデータはデータLED(LED7〜LED0)へ出力される
指定中のBRAMのアドレスを表示
指定中のアドレスはアドレスLED(LED15〜LED8)へ出力される
指定したデータを指定したアドレスへ書き込む
書き込み先のアドレス(sw15〜sw8)と書き込むデータ(sw7〜sw0)を指定して書き込みボタン(weボタン)を押すことで、ブロックRAMへデータを書き込むことができる
code:top.v
`timescale 1ns / 1ps
module top(
input clk,
input we,
input 15:0 sw,
output 15:0 led
);
logic 7:0 addr;
logic 7:0 din;
logic 7:0 dout;
assign addr = sw15:8;
assign din = sw7:0;
assign led = {addr, dout};
my_block_ram ram (
clk,
we,
addr,
sw,
dout
);
endmodule
module my_block_ram (
input clk, we,
input logic 7:0 addr, din,
output logic 7:0 dout
);
logic 7:0 ram 127:0;
always_ff @(posedge clk)
begin
if (we)
ramaddr <= din;
dout <= ramaddr;
end
endmodule
code:top.xdc
# Clock signal
set_property PACKAGE_PIN W5 get_ports clk
set_property IOSTANDARD LVCMOS33 get_ports clk
create_clock -add -name sys_clk_pin -period 10.00 -waveform {0 5} get_ports clk
# Switches
set_property PACKAGE_PIN V17 [get_ports {sw0}]
set_property IOSTANDARD LVCMOS33 [get_ports {sw0}]
set_property PACKAGE_PIN V16 [get_ports {sw1}]
set_property IOSTANDARD LVCMOS33 [get_ports {sw1}]
set_property PACKAGE_PIN W16 [get_ports {sw2}]
set_property IOSTANDARD LVCMOS33 [get_ports {sw2}]
set_property PACKAGE_PIN W17 [get_ports {sw3}]
set_property IOSTANDARD LVCMOS33 [get_ports {sw3}]
set_property PACKAGE_PIN W15 [get_ports {sw4}]
set_property IOSTANDARD LVCMOS33 [get_ports {sw4}]
set_property PACKAGE_PIN V15 [get_ports {sw5}]
set_property IOSTANDARD LVCMOS33 [get_ports {sw5}]
set_property PACKAGE_PIN W14 [get_ports {sw6}]
set_property IOSTANDARD LVCMOS33 [get_ports {sw6}]
set_property PACKAGE_PIN W13 [get_ports {sw7}]
set_property IOSTANDARD LVCMOS33 [get_ports {sw7}]
set_property PACKAGE_PIN V2 [get_ports {sw8}]
set_property IOSTANDARD LVCMOS33 [get_ports {sw8}]
set_property PACKAGE_PIN T3 [get_ports {sw9}]
set_property IOSTANDARD LVCMOS33 [get_ports {sw9}]
set_property PACKAGE_PIN T2 [get_ports {sw10}]
set_property IOSTANDARD LVCMOS33 [get_ports {sw10}]
set_property PACKAGE_PIN R3 [get_ports {sw11}]
set_property IOSTANDARD LVCMOS33 [get_ports {sw11}]
set_property PACKAGE_PIN W2 [get_ports {sw12}]
set_property IOSTANDARD LVCMOS33 [get_ports {sw12}]
set_property PACKAGE_PIN U1 [get_ports {sw13}]
set_property IOSTANDARD LVCMOS33 [get_ports {sw13}]
set_property PACKAGE_PIN T1 [get_ports {sw14}]
set_property IOSTANDARD LVCMOS33 [get_ports {sw14}]
set_property PACKAGE_PIN R2 [get_ports {sw15}]
set_property IOSTANDARD LVCMOS33 [get_ports {sw15}]
# LEDs
set_property PACKAGE_PIN U16 [get_ports {led0}]
set_property IOSTANDARD LVCMOS33 [get_ports {led0}]
set_property PACKAGE_PIN E19 [get_ports {led1}]
set_property IOSTANDARD LVCMOS33 [get_ports {led1}]
set_property PACKAGE_PIN U19 [get_ports {led2}]
set_property IOSTANDARD LVCMOS33 [get_ports {led2}]
set_property PACKAGE_PIN V19 [get_ports {led3}]
set_property IOSTANDARD LVCMOS33 [get_ports {led3}]
set_property PACKAGE_PIN W18 [get_ports {led4}]
set_property IOSTANDARD LVCMOS33 [get_ports {led4}]
set_property PACKAGE_PIN U15 [get_ports {led5}]
set_property IOSTANDARD LVCMOS33 [get_ports {led5}]
set_property PACKAGE_PIN U14 [get_ports {led6}]
set_property IOSTANDARD LVCMOS33 [get_ports {led6}]
set_property PACKAGE_PIN V14 [get_ports {led7}]
set_property IOSTANDARD LVCMOS33 [get_ports {led7}]
set_property PACKAGE_PIN V13 [get_ports {led8}]
set_property IOSTANDARD LVCMOS33 [get_ports {led8}]
set_property PACKAGE_PIN V3 [get_ports {led9}]
set_property IOSTANDARD LVCMOS33 [get_ports {led9}]
set_property PACKAGE_PIN W3 [get_ports {led10}]
set_property IOSTANDARD LVCMOS33 [get_ports {led10}]
set_property PACKAGE_PIN U3 [get_ports {led11}]
set_property IOSTANDARD LVCMOS33 [get_ports {led11}]
set_property PACKAGE_PIN P3 [get_ports {led12}]
set_property IOSTANDARD LVCMOS33 [get_ports {led12}]
set_property PACKAGE_PIN N3 [get_ports {led13}]
set_property IOSTANDARD LVCMOS33 [get_ports {led13}]
set_property PACKAGE_PIN P1 [get_ports {led14}]
set_property IOSTANDARD LVCMOS33 [get_ports {led14}]
set_property PACKAGE_PIN L1 [get_ports {led15}]
set_property IOSTANDARD LVCMOS33 [get_ports {led15}]
#Buttons
set_property PACKAGE_PIN U18 get_ports we
set_property IOSTANDARD LVCMOS33 get_ports we