Verilog、SystemVerilog、SystemCなど、ハードウェア記述言語についてのブログです。
top.v:6: Can't locate sample module definition
Check the verilog-library-directories variable.
I looked in (if not listed, doesn't exist):
c:/cygwin/home/user/verilog.top.v
// Local Variables:
// verilog-library-extentions:(".v" ".vo")
// End:
int fact(int n) {
if (n <= 1) return 1;
else return n*fact(n-1);
}
int my_mod(int n, int m) {
return (n %m);
}
%module example
%{
%}
extern int fact(int);
extern int my_mod(int n, int m);
swig -tcl example.i
gcc example.c example_wrap.c -shared -ltcl -o example.dll
$tclsh
% load example.dll
%fact 5
120
% my_mod 10 3
1
%
swig -perl example.i
gcc example.c example_wrap.c -shared -I/usr/lib/perl5/5.10/i686-cygwin/CORE \
-L/usr/lib/perl5/5.10/i6868-cygwin/CORE -lperl -o example.dll
#! /usr/bin/perl -w
use strict;
use example;
print example::fact(5), "\n";
print example::my_mod(10, 3), "\n";
init_tk
# トップレベルの作成、タイトル追加
toplevel .top
wm title .top "Hello World"
# ウィジェット追加
button .top.hello -text Hello -command { puts "Hello, World!" }
pack .top.hello -padx 20 -pady 10
# tkwaitを実行することで、作成されたウィンドウがクローズされるまで
# 実行されます
tkwait window .top
package definitions;
parameter VERSION = "1.0";
typedef enum {ADD, SUB, MUL} opcodes_t;
typedef struct {
logic [31:0] a, b;
opcodes_t opcode;
} instruction_t;
function automatic [31:0] multiplier (input [31:0] a, b);
return a * b;
endfunction // multiplier
endpackage // definitions
module ALU (
input definitions::instruction_t IW,
input logic clock,
output logic [31:0] result
);
always_ff @(posedge clock) begin
case(IW.opcode)
definitions::ADD : result = IW.a + IW.b;
definitions::SUB : result = IW.a - IW.b;
definitions::MUL : result = definitions::multiplier(IW.a, IW.b);
endcase // case (IW.opcode)
end
endmodule // ALU
import definitions::*;
module ALU_tb;
parameter PERIOD = 10;
logic clock;
instruction_t IW;
wire [31:0] result;
initial begin
clock = 1'b0;
IW.opcode = ADD;
IW.a = 32'b0;
IW.b = 32'b0;
repeat (5) @(negedge clock);
IW.a = 32'hdeadbeef;
IW.b = 32'b1;
@(negedge clock) IW.opcode = SUB;
@(negedge clock) IW.opcode = MUL;
@(negedge clock);
#1 $finish;
end
always #(PERIOD/2)
clock <= ~clock;
ALU DUT ( .* );
endmodule // ALU_tb
vlib work
vlog -sv definitions.sv ALU_test.sv ALU.sv
vsim -c -do "add wave *; run 1us" ALU_tb
カレンダー
カテゴリー
フリーエリア
最新CM
最新記事
最新TB
プロフィール
ブログ内検索
カウンター
アクセス解析