2011-06-16 13 views
5

मैं एक वीपीआई/पीएलआई इंटरफ़ेस लिखना चाहता हूं जो ऑडियो फाइलें (यानी WAV, AIF, आदि) खोल देगा और डेटा Verilog सिम्युलेटर को प्रस्तुत करेगा। मैं फिलहाल Icarus का उपयोग कर रहा हूं और इनपुट फ़ाइल स्वरूपों और डेटा प्रकार रूपांतरण को संभालने के लिए libsndfile का उपयोग करना चाहता हूं।ऑडियो फाइलों को खोलने के लिए सरल वेरिलोग वीपीआई मॉड्यूल

मुझे यकीन नहीं है कि सी कोड में क्या उपयोग करना है ... आईईईई 1364-2001 पर देखा है और अभी भी भ्रमित है कि मुझे कौन से कार्यों का उपयोग करना चाहिए।

आदर्श रूप में मैं डेटा पोर्ट (सीरियल या समांतर), घड़ी इनपुट के साथ एक Verilog मॉड्यूल और पिन शुरू/बंद करना चाहते हैं। मैं दो मॉड्यूल को कार्यान्वित करना चाहता हूं, एक फ़ाइल से प्लेबैक के लिए, और दूसरा टेस्ट के तहत फ़िल्टर से आउटपुट रिकॉर्ड करेगा।

मैं यह सब सी में कर सकते हैं और बस अपना testbench में मॉड्यूल का दृष्टांत या मैं एक समारोह (माना $read_audio_data) और आवरण मॉड्यूल लिखने के लिए प्रत्येक घड़ी नाड़ी पर कॉल करने के लिए होगा ??

एचएम, या मुझे मॉड्यूल बनाने की आवश्यकता हो सकती है और फिर इसके लिए एक हैंडल प्राप्त कर सकते हैं और किसी भी तरह से हैंडल पर मूल्य/vect पास कर सकते हैं?

मैं इस बारे में चिंतित नहीं हूं कि फ़ाइल नाम कैसे सेट किए जाएंगे, क्योंकि शायद मैं वैसे भी Verilog कोड से नहीं करूँगा। और मैं शायद समय के लिए 24-बिट पूर्णांक नमूने और libsndfile रूपांतरण को काफी अच्छी तरह से संभालना चाहता हूं। शायद, मैं अब के लिए धारावाहिक रहूंगा (आई 2 एस जैसी फैशन में भी हो सकता है) और यदि आवश्यकता हो तो वेरिलोग में डी-सीरियलाइज करें।

इसके अलावा, मैं इकारस plug-in जो एक वीडियो कैमरा है कि पढ़ता PNG फ़ाइलें, हालांकि वहाँ इमेज प्रोसेसिंग के लिए कई और अधिक पहलू हैं तो ऑडियो करने के लिए है लागू करता है पर ध्यान दिया है। इसलिए इस समय कोड मेरे लिए थोड़ी अधिक जटिल दिखता है - न तो मैं इसे चलाने के लिए प्राप्त करने में कामयाब रहा।

उत्तर

3

मैं इस तरह यह आ सलाह देते हैं:

  1. आंकड़ा बाहर अपने सी/Verilog इंटरफ़ेस
  2. मन में है कि इंटरफेस के साथ ऑडियो फ़ाइल पहुँच को लागू है, लेकिन VPI
  3. के बारे में चिंता नहीं
  4. सी लागू/वीपीआई

का उपयोग कर वेरिलोग गोंद शायद इंटरफ़ेस बहुत सरल हो सकता है। ऑडियो फ़ाइल खोलने के लिए एक फ़ंक्शन और किसी आवश्यक पैरामीटर (नमूना आकार, बड़ा/छोटा एंडियन, आदि ...) निर्दिष्ट करें, और दूसरा फ़ंक्शन अगला नमूना देता है। यदि आपको एक ही सिमुलेशन में एकाधिक फ़ाइलों से पढ़ने का समर्थन करने की आवश्यकता है, तो आपको पीएलआई फ़ंक्शंस में हैंडल को सॉर्ट करना होगा ताकि आप यह पहचान सकें कि आप किस फ़ाइल से पढ़ रहे हैं।

initial $OpenAudioFile ("filename"); 

always @(posedge clk) 
    audio_data <= $ReadSample; 

छवि VPI नमूना एक उचित उदाहरण से शुरू करने के लिए दिखाई देता है: के रूप में

Verilog उपयोग में सरल किया जा सकता है।सी कोड में उपयोग करने के लिए बुनियादी मुहावरे हैं:

तर्क पहुँच

// Get a handle to the system task/function call that invoked your PLI routine 
vpiHandle tf_obj = vpi_handle (vpiSysTfCall, NULL) 

// Get an iterator for the arguments to your PLI routine 
vpiHandle arg_iter = vpi_iterate (vpiArgument, tf_obj) 

// Iterate through the arguments 
vpiHandle arg_obj; 
arg_obj = vpi_scan (arg_iter); 
// do something with the first argument 
arg_obj = vpi_scan (arg_iter); 
// do something with the second argument 

प्राप्त कर रहा है मानों Verilog से Verilog को

s_vpi_value v; 
v.format = vpiIntVal; 
vpi_get_value (handle, &v); 
// value is in v.value.integer 

लेखन मूल्यों

s_vpi_value v; 
v.format = vpiIntVal; 
v.value.integer = 0x1234; 
vpi_put_value (handle, &v, NULL, vpiNoDelay); 

32 बिट्स से बड़े मान पढ़ने या लिखने के लिए, आपको vpiIntVal के बजाय vpiVectorVal का उपयोग करना होगा, और एक s_vpi_vector संरचना को डी/एन्कोड करना होगा।

+0

मुझे 'audio_data <= $ ReadSample; 'लागू करने में कोई समस्या आई है, इसलिए मैंने इसे' $ ReaddSample (audio_cah1n1, audo_chan2); 'फैशन में किया है। अंतर मूल रूप से है, यह कार्य या कार्य है, कार्य वे कैसे व्यवहार करते हैं के अनुसार काफी बुरा लगता है ... ऐसा लगता है जैसे सिमुलेशन के दौरान किसी भी समय कार्यों को कुछ हद तक बुलाया जा सकता है और यह अच्छा नहीं है अगर मैं गिन रहा हूं सी समारोह में नमूना सूचकांक! – errordeveloper

1

मैं कुछ दिनों के खर्च किया है अब पीएलआई testbench को लागू करने, अगर किसी को भी इस पर लिखा है और वे इसे उपयोगी मिल सकता है - यहाँ मेरी source code है।

उपयोग git clone git://github.com/errordeveloper/sftb कोड रेपो प्राप्त करने या github.com से डाउनलोड करने के लिए); वहाँ एक रीडमी फ़ाइल है और नीचे कुछ बुनियादी परिणामों के स्क्रीनशॉट है।

Screenshow of a little fragment from Velvet Underground's Sunday Morning in gtkwave

मैं भी my new blog में इस बारे में लिखा था की है, इसलिए उम्मीद है अगर कोई बात की इस तरह की खोज करता है कि वे इसे मिल जाएगा। मुझे कुछ भी समान नहीं मिला, इसलिए इस परियोजना को शुरू किया!

1

यह Cocotb के लिए एक ओपन-सोर्स प्रोजेक्ट के लिए एक अच्छा फिट लगता है जो आपके डीयूटी को पाइथोनिक इंटरफ़ेस प्रदान करने के लिए वीपीआई को सारणीबद्ध करता है। आपको कोई अतिरिक्त वेरिलोग टेस्टबेंच या रैपर आरटीएल लिखना नहीं होगा या वेरिलोग से वीपीआई कार्यों या कार्यों को कॉल करना होगा क्योंकि टेस्टबेंच शुद्ध पायथन हैं।

आपका testbench के रूप में वर्णित कुछ इस तरह दिखेगा:

import cocotb 
from cocotb.clock import Clock 
from cocotb.triggers import RisingEdge 

# Whatever audio-file IO library you happen to like best... 
from scikits.audiolab import wavread 

@cocotb.test() 
def stream_file(dut, fname="testfile.wav")  

    # Start a clock generator 
    cocotb.fork(Clock(dut.clk, 5000)) 

    data, sample_frequency, encoding = wavread(fname) 
    result = []   

    while data: 
     yield RisingEdge(dut.clk) 

     dut.data_in <= data.pop(0) 
     result.append(dut.data_out.value.integer) 

    # Write result to output file 

अस्वीकरण: मैं Cocotb डेवलपरों में से एक है और इस तरह संभवतः पक्षपाती हूँ, लेकिन मैं भी किसी को इसी तरह की सुविधा का उत्पादन करने के लिए चुनौती होगी उपरोक्त testbench जल्दी और कम से कम (रखरखाव) कोड के साथ।

+0

बढ़िया! अगर मैं वेरिलोग वापस आ जाता हूं, तो मैं निश्चित रूप से कोकोट को आज़मा दूंगा! – errordeveloper

संबंधित मुद्दे