2016-04-11 3 views
-1

Я пытаюсь проверить, соответствует ли Yosys моим требованиям или нет. Что я хочу сделать, так это найти операцию в коде Verilog (например, temp = 16 * val1 + 8 * val2) и заменить ее на другой op like (temp = val1 < < 4 + val2 < < 3).Найти и заменить операцию в Verilog с помощью Yosys

Какие детали мне нужно узнать & использование от Yosys? если кто-нибудь знает набор команд для использования, может ли он/она, пожалуйста, дайте мне знать, чтобы повысить мою кривую обучения?

Спасибо.

ответ

0

Для примера рассмотрим следующий VERILOG вход (test.v):

module test(input [7:0] val1, val2, output [7:0] temp); 
    assign temp = 16*val1 + 8*val2; 
endmodule 

Команда yosys -p 'prep; opt -full; show' test.v будет производить следующую схему:

enter image description here

И выход написанный на консоль содержит этот :

3.1. Executing OPT_EXPR pass (perform const folding). 
Replacing multiply-by-16 cell `$mul$test.v:2$1' in module `\test' with shift-by-4. 
Replacing multiply-by-8 cell `$mul$test.v:2$2' in module `\test' with shift-by-3. 
Replacing $shl cell `$mul$test.v:2$1' (B=3'100, SHR=-4) in module `test' with fixed wiring: { \val1 [3:0] 4'0000 } 
Replacing $shl cell `$mul$test.v:2$2' (B=2'11, SHR=-3) in module `test' with fixed wiring: { \val2 [4:0] 3'000 } 

Две строки, которые читаются Replacing multiply-by-* cell, являются упомянутыми вами преобразованиями. После этого две линии заменяют операции с постоянным сдвигом на проводку, используя {val1[3:0], 4'b0000} и {val2[4:0], 3'b000} в качестве входов для сумматора.

Это делается в проходе opt_expr. См. passes/opt/opt_expr.cc за его исходный код, чтобы узнать, как это делается.

 Смежные вопросы

  • Нет связанных вопросов^_^