Sunday, January 3, 2016

Simulink HDL Workflow(Combinational Circuit Example)

Simulinkte hdl coder çalıştırmadan önce şu adımları izliyoruz:
1) Oluşturduğumuz model dosyasını subsystem haline getiriyoruz. Hdl coder subsytem istemektedir.
2) Subsytem parameterlerinden Treat as atomic unit özelliğini seçiyoruz.
3) Simulink preferences -> Solver -> Solver options: Fixed-step tipini seçiyoruz.
4) Subsystem bloğu için HDL workflow advisor'ı çalıştırıyoruz.

Tasarladığımız sistem; 2 int8 tipindeki sinyali sabit ile çarptıktan sonra, çarpımlarının toplamını alıp 2 ile çarpıyor.




Giriş sinyallerini Microblaze'den verebilmek için AXI4, çıkışı ise external olarak seçiyoruz. Aşağıdaki adımları tamamladıktan sonra generate RTL code and IP core basamığını run ediyoruz.



Code Generation Report dan bize oluşturduğu dosyaları göstermeketedir.
.mpd ve .pao özellikle ISE custom component kullanırken işimize yaramaktadır. Biz Vivado kullanacağız. Otomatik üretilen 6 .vhd dosyasını Vivado da add directories ile import ediyoruz.

mul_model_pcore altında 2 component var.
1) axi_lite: Bu adından anlaşılacağı gibi axi4 protokolü define ediyor.
2) dut(device under test): Bu ise simulink modelindeki custom işlemi yapıyor.
Bu iki component top level de instantiate edilmiştir.
Out1 sinyali external idi. Top level'da görülmektedir.
Giriş portları in2 ve in3 ise axi_lite componentine input olarak verilmektedir.
Dut componenti aşağıda görülmektedir. Bu kombinasyonel logic kısmıdır.

AxiLite componenti ise addr_decoder ve axi_lite_module o.ü 2 blok içeriyor. in2 ve in3 siyalleri addr_decoder kısmına bağlanmaktadır.
addr_decoder kodunda; addr_sel decode edilerek in2 ve in3 sinyallerine istediğimiz değerleri yazabiliyoruz.
Vivado da Create and package IP ile dosyaları IP core haline getiriyoruz.

Oluşturulan IPcore un simülasyonu yapılabilir. Ayrıca Vivado block design a eklenerek Microblaze üzerinden kontrol edilebilir.

teşekkürler..

No comments:

Post a Comment