Matlab中如何實(shí)現(xiàn)將長字符串換行寫
太長不看版
舉例如下:
% Port definition
fprintf(fID,[...
'\n'...
'input clk;' '\n'...
'input rst_n;' '\n'...
'input [%d:0] msg;' '\n'...%row-1
'input in_valid;' '\n'...
'output reg [%d:0] codeword;' '\n'...%col-1
'output reg out_valid;' '\n'...
],row-1,col-1);- 加上中括號;
- 將長字符串分割成多個子字符串;
- 子字符串之間至少隔一個空格;
- 換行符用
...
正文
最近在搞畢設(shè)的東西,其中有一個需要寫很麻煩的verilog文件。
麻煩但是卻不復(fù)雜,LDPC的編碼器,大概就是一個200多bits寬的輸入信號,500多bit寬的輸出信號,輸出每個bit都是由某些輸入的bit進(jìn)行相同的運(yùn)算得到的,用一個200多*500多的矩陣表示對應(yīng)關(guān)系。
如果要單純寫verilog,會死人的,如果在verilog里寫生成邏輯,又要占用很大的內(nèi)存來存放生成矩陣,而且邏輯難寫。于是就想到用Matlab代碼來生成verilog代碼。
Matlab里有fprintf函數(shù)可以輸出數(shù)據(jù)到文件。
舉個栗子:
fprintf(fID,'Hello world!');
就可以把“Hello world!”輸出到fID對應(yīng)的文件中。
打開文件的函數(shù)是fID = fopen('filepath/filename.postfix','w');其中w表示寫入,如果是讀取則換成r,更多用法請help fopen
那么問題來了,如果我把verilog代碼的每一行分別用一個fprintf輸出,那么我的.m文件就會充斥著一大堆fprintf,我這個強(qiáng)迫癥對這種高度重復(fù)的代碼簡直不能忍。
但是如果我把每個功能塊單獨(dú)寫在一個fprintf里,可讀性確實(shí)高很多,但是fprintf那行就會很長,同樣不能忍,并且修改的時候會非常痛苦!
于是我就去找有沒有類似Linux腳本中‘\’的換行符,讓解釋器把多行代碼當(dāng)成一行去執(zhí)行。
確實(shí)有這個換行符,
... ←三個點(diǎn)就是Matlab里的換行符??梢詫⒃撔械奈膊亢拖乱恍械念^部連接起來。
但是另一個問題就出來了,這個換行符沒辦法用在字符串中間,我把一整塊的代碼當(dāng)成一個字符串,如果中間加上換行符,那么解釋器會把換行符也當(dāng)做要輸出的內(nèi)容,一起輸出去了。
由于 fprintf 的參數(shù)分別為:文件handler、輸出array、輸出數(shù)據(jù)(如有)。
舉栗子:
fprintf( fID, 'data1: %d\n', data1);
其中中間的字符串會被當(dāng)成一個只有一個元素的array。
所以解決方法就來了,只要把中間的array多加幾個元素,就可以分割長字符串,并在子字符串之間添加換行符。
舉栗子:
% Port definition
fprintf(fID,[...
'\n'...
'input clk;' '\n'...
'input rst_n;' '\n'...
'input [%d:0] msg;' '\n'...%row-1
'input in_valid;' '\n'...
'output reg [%d:0] codeword;' '\n'...%col-1
'output reg out_valid;' '\n'...
],row-1,col-1);用單引號括起來的每一個小字符串會被解釋為輸出array的一個元素,子字符串之間用空格(可多個,至少一個) 或逗號隔開,即一個單行的矩陣(array)。
中括號必不可少,是將各子字符串結(jié)合為一個array的標(biāo)識。
另外因?yàn)関erilog里經(jīng)常需要輸出類似 3b'101之類的東西,而單引號會被當(dāng)做元素的起/止符。想要輸出單引號,就需要連續(xù)打2個單引號。
比如:
fprintf(fID, 'outdata <= 3''b101 ')
這也是為什么兩個子字符串中間至少要有一個空格的原因,如果沒有空格就會被連接起來,并且中間多了個單引號。
總結(jié)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python基礎(chǔ)練習(xí)之用戶登錄實(shí)現(xiàn)代碼分享
這篇文章主要介紹了Python基礎(chǔ)練習(xí)之用戶登錄實(shí)現(xiàn)代碼分享,還是比較不錯的,這里分享給大家,供需要的朋友參考。2017-11-11
python爬取王者榮耀全皮膚的簡單實(shí)現(xiàn)代碼
在本篇文章里小編給大家分享的是一篇關(guān)于16行python代碼 爬取王者榮耀全皮膚的知識點(diǎn)內(nèi)容,有興趣的朋友們學(xué)習(xí)下。2020-01-01
基于SQLAlchemy實(shí)現(xiàn)操作MySQL并執(zhí)行原生sql語句
這篇文章主要介紹了基于SQLAlchemy實(shí)現(xiàn)操作MySQL并執(zhí)行原生sql語句,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-06-06
Python 網(wǎng)絡(luò)爬蟲--關(guān)于簡單的模擬登錄實(shí)例講解
今天小編就為大家分享一篇Python 網(wǎng)絡(luò)爬蟲--關(guān)于簡單的模擬登錄實(shí)例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-06-06
Python iter()函數(shù)用法實(shí)例分析
這篇文章主要介紹了Python iter()函數(shù)用法,結(jié)合實(shí)例形式詳細(xì)分析了Python iter()函數(shù)的功能、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2018-03-03

