В предыдущим посте я упоминал про MyHDL, теперь буду разбираться с этой темой. Библиотека предоставляет псевдоверилоговский синтаксис для Python, благодаря которому можно транслировать написанные блоки на Verilog/VHDL и/или моделировать их, используя встроенные в Python средства(matplotlib) и/или создавать временные диаграммы. Возможностей на самом деле больше, но надо разбираться.
Перед тем, как погружаться в MyHDL, коротко моя сборка Python. Я пользуюсь miniconda 2.7 с установленными из репозитория пакетами numpy, matplotlib, pip (-через cmd в папке /Scrips conda install), установленным через pip spyder(-там же pip install) и скаченным c github myhdl (-cmd > python setup.py install в распакованной папке). Вот необходимый минимум.
На сайте MyHDL много описания и примеров. Моей конечной целью будет переписать CORDIC (снова, опять). Забавное совпадение, что в примерах для MyHDL есть CORDIC. Как раз посмотрю есть ли у меня где-нибудь недочеты.
Единственное новое с чем я столкнулся - декораторы и генераторы в Python. Про декораторы хорошо расписано на хабре, а генераторы по любой ссылке в гугле. Я опущу примеры с сайта MyHDL и начну с "хвоста", то есть в тестбенча.
Получившиеся графики в Pthon:
Так же в рабочей папке появится файл .vcd, который можно открыть в gtkwave:
Видно, что результат получился одинаковым, но открывать .vcd файл дольше. В ModelSim тоже можно отрыть .vcd, но сначала нужно сконвертировать vcd2wlf в окне команд ModelSim'а.
Перед тем, как погружаться в MyHDL, коротко моя сборка Python. Я пользуюсь miniconda 2.7 с установленными из репозитория пакетами numpy, matplotlib, pip (-через cmd в папке /Scrips conda install), установленным через pip spyder(-там же pip install) и скаченным c github myhdl (-cmd > python setup.py install в распакованной папке). Вот необходимый минимум.
На сайте MyHDL много описания и примеров. Моей конечной целью будет переписать CORDIC (снова, опять). Забавное совпадение, что в примерах для MyHDL есть CORDIC. Как раз посмотрю есть ли у меня где-нибудь недочеты.
Единственное новое с чем я столкнулся - декораторы и генераторы в Python. Про декораторы хорошо расписано на хабре, а генераторы по любой ссылке в гугле. Я опущу примеры с сайта MyHDL и начну с "хвоста", то есть в тестбенча.
# -*- coding: utf-8 -*-
from myhdl import *
import matplotlib.pyplot as plt
plt_clk = []
plt_cnt = []
def clkgen():
global plt_clk, plt_cnt
r_cnt = Signal(modbv(0, 0, 4))
r_clock = Signal(bool(0))
@instance
def posedge_negedge():
while True:
yield delay(10)
r_clock.next = 1
yield delay(10)
r_clock.next = 0
@always(r_clock.posedge)
def count():
r_cnt.next = r_cnt + 1
@instance
def monitor():
while True:
plt_clk.append(int(r_clock))
plt_cnt.append(int(r_cnt))
print "%d_%d" %(now(), r_clock)
yield delay(1)
return posedge_negedge, count, monitor
inst = traceSignals(clkgen)
sim = Simulation(inst)
sim.run(100)
fig, ax = plt.subplots(2,1)
ax[0].plot(plt_clk,'ro-')
ax[1].plot(plt_cnt,'bo-')
fig.tight_layout()
Так же в рабочей папке появится файл .vcd, который можно открыть в gtkwave:


Комментариев нет:
Отправить комментарий