【Verilog】 記述言語で論理設計Project13 【VHDL】
レス数が950を超えています。1000を超えると書き込みができなくなります。
HDLの処理系も、それを実際に動かすシミュレータ・評価基板も、
安価で入手できるようになってきました。
このスレが目に入ったお嬢さん! HDLで何か作って遊んでみませんか。
日曜工作のHDL書き、学生さん、プロの方、主婦の方、カキコお待ちしております。
関連情報は >2-10 あたり。
入れ食いキーワード
・Nios、MicroBraze
・Artix-7、Kintex-7、Virtex-7、ハードコアCPU内蔵 Zynq-7000
前スレ (直近スレのみ)
2012/11/03〜 【Verilog】 記述言語で論理設計Project12 【VHDL】
http://uni.2ch.net/test/read.cgi/denki/1351913871/
2011/12/07〜 Project11
http://uni.2ch.net/test/read.cgi/denki/1323187568/
2010/09/17〜 Project10
http://kamome.2ch.net/test/read.cgi/denki/1284652343/ なんで非同期リセットをいれるかというとRTLがきれいになる。非同期リセットを
入れないと、プリミティブのクロックイネーブルを使わない回路になりやすい。
ある寺の場合だけど。
しかたないので非同期リセットを入れてる。W >わいは逆やな。if分岐では必ずbegin endで括る。
いろいろ試してみたがbegin endは煮ても焼いても食えない。
悪いことはいわん、とにかく削除すべし。 >>849
> if(reset)
> srff<=0;
もう1行増えたらどうするの? begin end 使うのですよね?
if(reset)
srff<=0;
dff<=1; if(reset)
{srff,dff}<= {0,1};
上の奴もこういう書き方が望ましい。
if(x==A)
{enable, data} <= {1, hoge}; >もう1行増えたらどうするの? begin end 使うのですよね?
300ページある教科書をみたが、一か所も必要ないな。
それから
独自cpu開発って本400ページあるのをみたがパイプライン処理のところ
1箇所くらいやな。
あとはbegin end 削ったらずいぶん簡単なソースコードになる。
コードが激減する。 だから複雑な組み合わせが発生する可能性はもちろんある。その場合はfunction
で書く。
しかし普通の制御はbegin endなんて必要ない。必要な時は下手な回路やと考えて
間違いない。
教科書に一か所もないというのは嘘で、必要なところは一か所もないということ。
例えばシリパラ変換
reg [7:0] ps;
begin
ps <= ps <<1;
ps[0] <= si;
end
こんな風に教科書にはかいてあるが,こんな書き方はまずい。
正しくは
ps <= {ps[6:0] << 1, si};
こうすると意味がはっきりする。 もっと分かり易くかくとすると
{ps[7:1],ps[0]} <= {ps[6:0] << 1, si}; > {srff,dff}<= {0,1};
こういうの見ただけで儂の頭がバグりそうになる。 >858
慣れよ。
ただし、その場合にはbit幅を指定しないとエラーになる。
正しくは
{srff, dff} <= {1'd0, 1'd1};
ちょっと見づらいな。
{srff, dff} <= {low, high};
これなら見やすいが,,,, >ps <= {ps[6:0] << 1, si};
これも慣れ? >>849
1990年代の懐かしい書き方ですね。
自分には無理。 pythonぽいという意味では今風。
そういう書き方にカブレて言語批判を繰り広げるも、
実力が伴わずバグを続出。 カッコ内に○×をつけてください
( ) begin end を使わないほうが、コンパイル時間が速い
( ) begin end を使う ほうが、コンパイル時間が速い
( ) begin end を使っても使わなくても、コンパイル時間は変わらない
( ) begin end を使わないほうが、FFの使用量が少ない
( ) begin end を使う ほうが、FFの使用量が少ない
( ) begin end を使っても使わなくても、FFの使用量は変わらない Python一目見たが好きになれないな。W
どこが似てるのかなーー?
begin endは大きなゴミ。まずは大きなゴミは履いて捨てる。
ゴミの代わりに?とリストを積極的に使うだけだものな。
assign decode = !ena ? 4'b0000 :
sel == 0 ? 4'b0001 :
sel == 1 ? 4'b0010 :
sel == 2 ? 4'b0100 :
sel == 3 ? 4'b1000 :
4'bxxxx ;
?のこんな使い方はCライクだと思うが、、、どこがPython?
begin
ps <= ps <<1;
ps[0] <= si;
end
こんなんより
ps <= { ps[6:0] << 1, si };
このほうが昔も今もセンスは上だな × ps <= { ps[6:0] << 1, si };
○ ps <= { ps[6:0], si }; ・マイクロ波の危険性 法の外にいる御用学者達
https://www.youtube.com/watch?v=EJluXfJQCuk
・元MI5部員Dr. Barrie Trowerの語る電磁波兵器@
https://www.youtube.com/watch?v=NRoN2Fsci3o
・ニック・ベグジェッチ博士 HAARP 機密科学ハイテク洗脳@
https://www.youtube.com/watch?v=Kpf2iKOtSfg
動画「陰謀論 脳侵略者」
https://vimeo.com/119665215
https://vimeo.com/118485020
https://vimeo.com/119029616
それぞれの動画の加害装置の電磁波の出力が「小さい」と言っている理由について
レーザーに例えると、60Wでプラズマ核融合炉のプラズマを発生させるためにつかっているのに対して、家庭では電球が60W
このギャップに気付かなければならない
誘導放出され、増幅されたマイクロ波を計測するのではなく、メーザーの出力の表示の数字が強さの目安
だから、動画のインタビューに出てくる人達は、「弱い」とか「小さい」という単語を使っていると思われ assign decode = !ena ? 4'b0000 :
sel == 0 ? 4'b0001 :
sel == 1 ? 4'b0010 :
sel == 2 ? 4'b0100 :
sel == 3 ? 4'b1000 :
バスのアドレスデコーダで、こんな書き方していました >>849
紙を節約したいならalwaysもifも改行せずに1行にしたほうがいいんじゃないの? >>864
登場から25年経ってる言語が今風なのかね >○ ps <= { ps[6:0], si };
そうか。こうだ!!!
めっちゃ美しい。
ps <= ps <<1;
こんな書き方では最下位ビットはどうなるのかわからん。
<<の演算子はいらないな。どう考えても使い道がない。ゴミ決定。
ifのbegin end,<<,>> 使用禁止 >紙を節約したいならalwaysもifも改行せずに1行にしたほうがいいんじゃないの?
alwaysを1行にするのはダメ。
ifを1行にするのはありだとは思う。しかし
always @(posedge clk or posedge reset)
if (reset) //DFFの非同期リセット
count_q <= 0;
else if (srff) //DFFのクロックエネーブル
count_q <= cy ? 0 : count_q + 1; //DFFのデータ
RTLをみると上は
count[*].clr =(reset) //DFFの非同期リセット
count[*].ena =(srff) //DFFのクロックエネーブル
count[*].d = cy ? 0 : count[*].q + 1; //DFFのデータ
のように合成される。
ifはenableを意識した書き方だな。 >>874
> ps <= ps <<1;
> こんな書き方では最下位ビットはどうなるのかわからん。
シフトした残りには0が入るって決められてるから、
分からん訳じゃ無いと思うけど。 おまえら、VHDL使え。Verilogの緩い文法議論が、くそうぜえ。使ってないから、そういう議論が頭悪いことに気づかないのか if文でbegin〜end は必ず使え<VHDL上がりの意見。 >>876
なんか、色々分かってない感じだよね。
ハードもソフトも。
「僕の考えた最強の書き方」 >>879
ニッポンから技術者が消えて、馬鹿な豚どもになりつつあるんだよ。だから仕方が無い。 >>874
ps[7:0] <= { ps[6:0], si };
ps(7 downto 0) <= (ps(6 downto 0) & si );
じゃないとだめ。
ああ、VHDLしばらく触らせてもらえないから忘れてきた。
つうか、大手半導体レイアウト会社でも、VHDLをどうして使うかってわかんないんだな。しっかり、符号演算のためって書いてあげたのに。
ニッポンやバイヨ。 >しばらく触らせてもらえない
やはりVHDLは廃れますか。
verilogとVHDLの中間ぐらいでいいんだが、
System-verilogに向かうのかねえ。 >>882
業種による。
アセンブラは廃れるけど、スーパーマリオの重力計算の微分方程式はすごいよ。
最近、オブジェクト指向の「ハードわかんね」というソフトウエアの技術者が、FPGAあたりをかじってマンセーとか、
ニコニコ本社で、「どうだオレサマすごいだろ」とかいうプレゼンをみせられたりして、つまんないというか、めんどくさい。
ぐらいに、廃れはしないと思うよ。
廃れていると思ったら、目線が狭いんだよ >シフトした残りには0が入るって決められてるから、
>分からん訳じゃ無いと思うけど。
つまりps[0]に関していえば、同じalways内で
ps[0] <= 0;
ps[0] <= si;
って2回書くってことだよな。この意味が不明というか、好きじゃない。
この書きかたは好きじゃない。こういう書き方って普通にやるのか?
ps[0] <= a;
ps[0] <= b;
ps[0] <= c;
これと同じなんだろうけど、
ps[0] <= a or b or c; >おまえら、VHDL使え。Verilogの緩い文法議論が、くそうぜえ。使ってないから、そういう議論が頭悪いことに気づかないのか
VHDLはverilogよりもっと糞だということに早く気が付けよ。W >>884
orではない。
最後の代入のみが有効。
>意味が不明というか、好きじゃない。
それは同意。
二回以上代入するような書き方はコンパイラは認めても
真面目なレビューなら落とされる。 psはffの出力
ps<<1はpsを入力とする組み合わせ回路の出力
<<1がpsのffそのものをシフトするように勘違いしてるように見える 国防省がソフトはAda,ハードはVHDLとして無理強いした。
Adaが糞で、糞から生まれたVHDLは糞の子。 ps[0] <= a;
ps[0] <= b;
ps[0] <= c;
これって、エラーで通らないんじゃないですか?
ps[0]俺はどうすりゃいいんだ? となる。
Verilogの柔軟な書き方は歓迎
でも、もう少し厳しい文法チェックが欲しい。
徹夜でもうろうとしているとデバッグが進まないから。 >ps<<1はpsを入力とする組み合わせ回路の出力
><<1がpsのffそのものをシフトするように勘違いしてるように見える
組み合わせ回路だけどシフトだろ。
ps <= ps << 1
これは
ps[7].d = ps[6].q;
ps[6].d = ps[5].q;
ps[5].d = ps[4].q;
ps[4].d = ps[3].q;
ps[3].d = ps[2].q;
ps[2].d = ps[1].q;
ps[1].d = ps[0].q;
ps[0].d = 0;
こういう意味だよ。
だから
ps[0].d = si; こいつをもう一度書く。
2重定義でしか入力をセットできない。 >これって、エラーで通らないんじゃないですか?
通るんじゃね。それなんとなく見たことあるから。
orじゃないかもしれないが、、、、
もしエラーになるんならひょっとするとディフォールトかな?
count <= 99;
if(a == 3)
count <= count + 1;
これはa != 3の時はcount=99になるだろ。
ps[0].d = 0;じゃなくて
ps[0].d = 未定;
ps[0] <= si; で未定が確定なのかもしれない。 久しぶりに設計やらないといけなくなったんだけど
昔Model Simってテストベンチかかなくても、GUIで波形成形出来なかったっけ? if (test&mode[3:0]==4'b0010)
のコードを見て、verilog死ねと思った ちょくちょく教科書という単語が出てくるけど何の本を指してるの? verilogで$signed使うと、バグが出て。
VHDLでuse IEEE.std_logic_unsigned.all すると止まるのは、
何とかならないものでしょうか。 間違った・・・・
verilogで$signed使うと、バグが出て。
VHDLでuse IEEE.std_logic_signed.all すると止まるのは、
何とかならないものでしょうか。 ps<<1を利用してpsを左シフトしつつps[0]にsiを代入したいから
always文の中でシーケンシャルな代入文を記述してるってことか
話を勘違いしてた >>897
何書いたか知らんけどverilogの仕様じゃないの?
過去スレで$signedでさわいでたときがあるよ >>899
VHDLでつくったのを戻してビット幅あわせてもおこるんよ。
VHDLで組むと起きないので、verilogの深くて単純な話にはまりそう。なので仕事では諦めた。
これ以上追うのは趣味の世界だし。
全てVHDLで組む信号処理の分野も理解できるし、verilog万歳な気持ちもよくわかる。
verilogがVHDLのように厳密な言語仕様にする別モードがあったら、VHDLいらない。
負の演算があるFIRフィルターを、verilogで組んでくださいとか言われたら切れるね。
できなくはないけど10倍デバックがかかる。
そこがデバック終わって数値演算ライブラリがverilogでできればいいけど、外部コンポーネント参照山のようにして、誰が見ても理解不能コードになることうけあい
面倒くさいから最初からVHDLでかいたほうがいいいやん。
テストベンチは、verilogの方が便利ね。
特にバス調停の決まり切った物。task文とか
verilogが曖昧過ぎて、その曖昧な部分を埋めたシミュレータとか論理合成ツールは偉いと思う。でも、デバックはVHDLじゃないと出来なさそうw >>900
興味あるなー。でも勘違いしてるんじゃない?
曖昧っていったってビット幅は正確に決められるしどんなところが問題なのか、具体的
な例はないの?
「1−1が0にならよ」とか、まさか負のキャリが立たないとかW
verilogで負の演算ができないなんてことはないだろ。W
FIRって知らんが、x/+-が素直に動けばもんだいなくできると思うが、、、W >>900
>負の演算があるFIRフィルターを、verilogで組んでくださいとか言われたら切れるね。
なんでですか? signedは敬遠してるな。機械様には全部符号なしで宣言してる。
符号付き演算だと思ってるのは人間だけで、あとは設計書類とコメントぐらい。
S*Sだと、{S1,R1}*{S2,R2}に分解して、筆算。
R1*R2 -((S1)? R2<<a:0) -((S2)? R1<<b:0) +((S1&S2)? 2^c:0);
あとは、例えば(-128)*(-128)をサポートするならbit幅が1つ余分に要るとか。
signedを使いこなせたらもっと楽になるんだろうけど
我ながら低レベルな記述をしてる。 signedだからって関係ないだろ。 でも俺もfloat以外では使うことないな。 論理回路設計の勉強をしてるのですが、プロの人達はまず最初にブロック図的なものを書くところから始めるのでしょうか
それとも構想を頭で描きながら記述していくのでしょうか
ブロック図などを書く場合はどういったツールを使用していますか 紙とシャーペン
ブロック図を書いたら回路図を書いて
フリップフロップをalways、AND,ORはassignにする。 基本設計をしてデバイス選定をする。
Libreoffice Writer を立ち上げてタイトルを書く。日付を入れる。
次に概要を書く
解決すべき問題がないかをリストアップする。
IPなど必要資料をリストアップする。
全体構成を箇条書きする。
タイトル名でプロジェクトディレクトリを作成する。
その下に
ドキュメントディレクトリ
VerilogTopディレクトリを作る。さらにその下にサブプロジェクトのディレクトリ
ツリーを作成する。
あとは漫画を描きながら各モジュールを作成してテストベンチを作成してテストする。
漫画はジェットストリームでノートに書く。完成した漫画はスマフォで撮影して
Evernoteでクラウドに挙げて、Libreofficeのドキュメントに貼り付けていく。
テストベンチのWaveデータもsnippingツールで画像コピーをしてドキュメントに
貼り付けていく。
というようなやり方だな。 Excelとかパワポとか言い出したら、目立・ル○サス系なのでそいつには気をつけろ!自分のやった領域以外の仕事はできない!
Wordでも書くよといいだしたら、信用できるかもw
Visioが使いやすいんじゃないかなあ。Word/Excel/パワポと描画エンジンはもう同じだけどw
要は、就職先によるだろ。
個人の場合は、描かない。めんどくさいし。
ブロック図で描かないと、設計できない人と。描いてしまうと、設計できなくなる人と。分かれる。
ASIC時代の人は、前者が多い。最近の人は、後者。
でも、両方体験して、どっちもできる賢者になるのをおすすめします。
>>910
在宅Webプログラマっぽい。かっこいい。w
余談というか、愚痴。
この仕事になった10年前あたりから、テストベンチの波形データを貼り付けたままで。満足。
「この信号のこの部分が、xx[ns]になっているから、仕様と一致することを確認した」
と書く意識のない奴ってなんなの。なぜかベテランに多い。
そういう人のverilogは、たいてい怪しくて、はまることが多い。
>>911
わし、ユニボール シグノ 0.5mm
ブロック図で、微妙な濃淡。微妙な太い細いが表現できて、毛筆のようなそのときの気持ちが表現できて気に入ってる。
ジェットストリームは、車の中とかの過酷な環境で使っている、あれいいよね。でもすぐになくす。
そういえば、最近、論理記号の定規をみないな、何処にしまったんだろ・・・ >>906ですが、みなさんありがとうございました
結局は人それぞれってことみたいですがいろいろと参考になりました
とりあえずジェットストリームが欲しくなりましたw 遠い地平線が消えて、深々とした夜の闇に心を休めるとき… >>809のお世話になった者です
I2Cのパターンを途中まで作ってみたのですが、考え方などあっているでしょうか
DATA[7:0]想定です
reg [4:0] cnt_addr;
reg [6:0] cnt_rate;
wire cnt_enable;
wire cry_addr;
// -- cnt_addr ----------------------------------------
always @(posedge clk or negedge reset) begin
if(reset == 1'b0)
cnt_addr <= 0;
else if(start_trigger == 1'b1)
cnt_addr <= 8;
else if(cnt_addr > 0)
if(cry_addr == 1'b1)
cnt_addr <= cnt_addr - 1;
else
cnt_addr <= cnt_addr;
else
cnt_addr <= 0;
end
assign cnt_enable = (cnt_addr > 0) ? 1'b1 : 1'b0;
// -- cnt_rate ----------------------------------------
always @(posedge clk or negedge reset) begin
if(reset == 1'b0)
cnt_rate <= 0;
else if(cnt_enable == 1'b1)
if(cry_addr == 1'b1)
cnt_rate <= 0;
else
cnt_rate <= cnt_rate + 1;
else
cnt_rate <= 0;
end
assign cry_addr = (cnt_rate == 99) ? 1'b1 : 1'b0; scl/scl_o、sda/sda_oがあるのはどうしたほうがいいのかよくわからなくなり
とりあえず試しているところです。。
// -- scl -------------------------------------------
assign scl = out_scl(cnt_enable,cnt_addr,cnt_rate);
function out_scl;
input en;
input [4:0] addr;
input [6:0] cnt;
begin
if(en == 1'b1)
if(cnt < 50)
out_scl = 1'b1;
else
out_scl = 1'b0;
else
out_scl = 1'b0;
end
endfunction
// -- scl_o -------------------------------------------
always @(posedge clk or negedge reset) begin
if(reset == 1'b0)
scl_o <= 1'b0;
else if(cnt_enable == 1'b1)
if(cnt_rate < 50)
scl_o <= 1'b1;
else
scl_o <= 1'b0;
else
scl_o <= 1'b0;
end reg [7:0] rom_sda = 8'b10110111;
// -- sda -------------------------------------------
assign sda = out_sda(cnt_enable,cnt_addr,rom_sda);
function out_sda;
input en;
input [4:0] addr;
input [7:0] rom_data;
begin
if(en == 1'b1)
out_sda = rom_data[addr - 1];
else
out_sda = 1'b0;
end
endfunction
// -- sda_o -------------------------------------------
always @(posedge clk or negedge reset) begin
if(reset == 1'b0)
sda_o <= 1'b0;
else if(cnt_enable == 1'b1)
sda_o <= rom_sda[cnt_addr - 1];
else
sda_o <= 1'b0;
end 簡単でも仕様を書く(目標を定める)
○ i2cマスタっぽい何かを作りたい
○ clkは何MHz SCLはその1/50
○ SCL↓とSDAの位相をずらさない
○ SCLもSDAもデフォルトLで構わない
○ スレーブアドレスは渡さない
○ r/wも渡さない
○ アクノリッジも見ない
○ データの8bitだけ渡す
○ シングルスレーブ、書き込みのみ
○ SDAはオープンドレインにしない
文法的にはアレだな。かわいそうだけど
begin~else否定派が生まれちゃったな。
resetは負論理ならxでもnでもpreでもsufでも付けましょう。 なかなか筋がいい。綺麗だね。
しかし921がいうように仕様をきめること。
それからステートマシンでプロトコルを書くのが先だな。
スタート待ち
アドレス検出、もし不一致ならストップへ
アック検出
、、、、、、
ストップ
みたいな感じでステートマシンを書く >>921>>922
ありがとうございます
いろいろと至らない点がありすみません
指摘頂いたこと以後注意します
今はまだ考え方がふわふわしてて記述に自信が持てません
一応シミュレーションだけはかけていますが。。
begin〜endは自分も全部付けて複数行かくスタイルでやってましたが、ここ最近のスレのやりとりでちょっと見直してみました
考え方が問題なければ、スタート/ストップコンディション、ACK含めステートマシン的な考え方で出来ればと思ってます うーん、opencore.orgのI2C masterを登録してダウンしてみるといいと思う。
今見たらメンテナンス中ってでるけど。 >>924
ありがとうございます
調べてみます
I2C自体が別に目的ではないんですが、今はいろんな手法を学べればと思ってるのでいろいろ指摘して頂けるとありがたいです 次のような記法は好きでない。(cnt_adrが0の時とかね)
rom_sda[cnt_addr - 1]
scl/sdaを組み合わせ回路で組んでいるが、
外部とやり取りする部分は基本FFにする。 >>915
お供をいたしましたパイロットは
わたくし、城達也でした。 そういえば、alteraだったかのライブラリで
reg <= 1'bz
という記述があって驚いた。
実際に(FPGAで)合成可能で二度驚いた。 >>926
すみません
最終的にはトライステート出力にするつもりです
>>927
そうですよね。。
scl_o/scl_oのほうはそのつもりでやってみたのですが、cnt_addrの立ち上がりから1クロックずれるのでどうしたらいいのかと。。根本的な見直しが必要ですかね >>929
FPGAでもASICでも、CMOS FET のゲート電圧を、ドレインーソース間が貫通しないようにすれば、ハイインピーダンスになるんだから、
何で驚くのかそっちの方が疑問。 そりゃFFにzを保持できる訳がないという先入観があったからな。
代入される信号もI/Oに繋がっていないと駄目だし、
合成結果も1/0を保持するFFと、open/driveを制御するFFの二つが
出力される。ASICしかしてない時は想像もしてなかった。 reg [7:0] rom_sda = 8'b10110111;
sda_o <= rom_sda[cnt_addr - 1];
へー、こういうアクセスってできるんだ。初めて知った。テストベンチなら使い
そうだがロジックでは使ったことがないな。どういう風に合成されるんだろ。
セレクタになるんだろうなきっと。この書き方気に入った。Goodだよ。
>最終的にはトライステート出力にするつもりです
スタート
アドレス
RW選択
アック待ち ここは入力に切り替えてトライステートにしないといけないから、最初
から考えておかないと。
受信はクロックストレッチというのがあって、要するにマスターはHにしてもスレーブがL
にしたままだとSCLがHにならない。
マスターはトライステートにしてSCLがHになるのを確認してから次のSCLをLにする。
ここはI2Cの肝だから、、、 >>932, 933
コンパイラで1か0に置き換えられているんじゃないの?もしくはORで合成されるとか。
本当にHi-Zにできたらタイミング解析が無駄に複雑になるだけでメリットないような気がする。 >>934
8入力のセレクタが作られるだろう。
シフトしてるのと同じかな。 >>936
ROMが合成すると、cnt_addrを使った組み合わせ回路になるだけ。 reg [7:0] decode[7:0]
= '{
8'b00000001,
8'b00000010,
8'b00000100,
8'b00001000,
8'b00010000,
8'b00100000,
8'b01000000,
8'b10000000
};
こういうのもできるから美しいデコーダができそうと喜んだが、できるのはSystemVerilog
だけのようだね。
これだけのためにコンパイラをSystemVerilogにすると何か問題あるだろうか? reg [7:0] decode[7:0]
ではなくて
reg [7:0] decode[0:7]じゃなかったっけ? 文法的にはどっちでもいいと思うよ。アクセスの順番が違うだけ。
上の例だと decode[0] が128,decode[7]が1
上を0にする方がわかりやすいから[0:7]が一般的なんだろう。
ってこっちのつもりだった。W >>939
"コンパイラ"って良く書いてあるけど、何を指してるのさ? >>939
なんでこんなverilogでできるやんググレカスレベルなことを恥ずかしくもなく聞いてくるんだよ >>946
そもそも >>939 は記述が変だし。 >943
Prime
記述はまともだとおもうがな。コンパイラが通るから。テストはそのうち
してみるが、今2chで忙しい。 カウンターやらシフトレジスタやらロムやら教科書に出てくるようなもん一通り出来たら、何作ればいいかな
会社に入ったら練習させられる課題とかありますか? レス数が950を超えています。1000を超えると書き込みができなくなります。