Простите новичка, я даже не знаю, как правильно задать этот вопрос:
У меня есть файл, который в данный момент загружен в банк памяти, и я хотел бы разделить его на четыре разных банка памяти.
У меня есть некоторый системный код verilog, который использует строку, очень похожую на эту:
$readmemh(mem_file, memories.ram);
для чтения в шестнадцатеричном файле (скажем, длиной 65536 байт) в некоторую память.
Теперь я хочу разделить память на четыре части и поместить первую четверть (16384 байта) в блок, вторую четверть в другую и т. Д. *
Один очевидный способ сделать это - разделить шестнадцатеричный файл, используя head, tail и т. Д., Как часть процесса сборки, который его создает, и затем передать все новые имена файлов во время моделирования, и иметь такие выражения, как
$readmemh(mem_file_1stbit, memories.ram1);
$readmemh(mem_file_2ndbit, memories.ram2);
$readmemh(mem_file_3rdbit, memories.ram3);
$readmemh(mem_file_4thbit, memories.ram4);
Но мне кажется, что это слишком сильно сочетает процесс сборки прошивки, сценарий моделирования и дизайн verilog.
Значительно лучшим решением (на мой взгляд) было бы изменить код verilog, чтобы сказать что-то вроде:
$readmemh(mem_file, memories.ram1, 0, (1<<14)-1);
$readmemh(mem_file, memories.ram2, (1<<14), (2<<14)-1);
$readmemh(mem_file, memories.ram3, (2<<14), (3<<14)-1);
$readmemh(mem_file, memories.ram4, (3<<14), (4<<14)-1);
Но не похоже, что verilog позволит мне делать подобные вещи.
Может кто-нибудь придумать аккуратную конструкцию, которая даст тот же результат?