Top.v में, मैं pe मॉड्यूल के X_MAX*Y_MAX इंस्टेंस जेनरेट करता हूं। पीईवी में, मैं विशेष रूप से उस उदाहरण के लिए उत्पन्न स्मृति को प्रारंभ करना चाहता हूं। उदाहरण के लिए, x=0,y=1: "pe_memory_x0_y0.dat" पर। मेरा शीर्ष-स्तरीय मॉड्यूल इस तरह दिखता है:

genvar x, y;
    generate for (y = 0; y < Y_MAX; y = y + 1) begin : ys
        for (x = 0; x < X_MAX; x = x + 1) begin : xs
         pe #(
            .X_MAX(X_MAX),
            .Y_MAX(Y_MAX),
            .X(x),
            .Y(y)
            )
            pe_inst(
                .clk(clk),
                ...
            );

P.v के अंदर, चीजें जैसे

$display("Loading pe memory at (%0d,%0d)", X, Y);

initial ब्लॉक में काम करते हैं! लेकिन जब मुझे $readmem$ की आवश्यकता हो,

$readmemb({"pe_memory_", X, "_y", Y, ".dat"}, n_bound_sel_memory);

काम नहीं करता:

X की अनिश्चित चौड़ाई है

एक्स के लिए एक चौड़ाई निर्दिष्ट करना, एक parameter जिसका मान genvar से आता है, बस और त्रुटियां फेंकता है।

मैं Xilinx FPGAs को लक्षित कर रहा हूं, और मैं अपने डिजाइन को iverilog के साथ अनुकरण करने का प्रयास कर रहा हूं।

1
fgjt 18 सितंबर 2020, 02:07

1 उत्तर

सबसे बढ़िया उत्तर

फ़ाइल नाम बनाने के लिए आप $sformatf का उपयोग कर सकते हैं:

$readmemb($sformatf("pe_memory_%0d_y%0d.dat", X, Y), n_bound_sel_memory);

IEEE Std 1800-2017, खंड 21.3.3 डेटा को एक स्ट्रिंग में फ़ॉर्मेट करना . का संदर्भ लें

2
toolic 18 सितंबर 2020, 02:21